• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            go使用redis

            Go語言的Redis客戶端,官方推薦了兩個客戶端:redigo和radix.v2
            安裝之:
            go get github.com/mediocregopher/radix.v2
            go get github.com/garyburd/redigo/redis

            test_redigo.go
            package main

            import (
                "fmt"
                "github.com/garyburd/redigo/redis"
                "log"
            )

            // test common
            func testCommonOperate() {
                // connect redis server
                c, err := redis.Dial("tcp""127.0.0.1:6379")
                if err != nil {
                    fmt.Println(err)
                    log.Fatal("connect redis-server error: ", err)
                    return
                }
                defer c.Close()

                // SET
                v, err := c.Do("SET""name""red")
                if err != nil {
                    fmt.Println(err)
                    return
                }
                fmt.Println(v)

                // GET
                v, err = redis.String(c.Do("GET""name"))
                if err != nil {
                    fmt.Println(err)
                    return
                }
                fmt.Println(v)

                // LPUSH
                c.Do("lpush""redlist""qqq")
                c.Do("lpush""redlist""www")
                c.Do("lpush""redlist""eee")

                // LRANGE
                values, _ := redis.Values(c.Do("lrange""redlist""0""100"))
                for _, v := range values {
                    fmt.Println(string(v.([]byte)))
                }

                // Scan
                var v1 string
                redis.Scan(values, &v1)
                fmt.Println(v1)

                // piple line
                c.Send("SET""name""red")
                c.Send("GET""name")
                c.Flush()
                c.Receive()
                c.Receive()
            }

            func subscribe() {
                c, err := redis.Dial("tcp""127.0.0.1:6379")
                if err != nil {
                    fmt.Println(err)
                    return
                }
                defer c.Close()

                psc := redis.PubSubConn{c}
                psc.Subscribe("redChatRoom")
                for {
                    switch v := psc.Receive().(type) {
                    case redis.Message:
                        fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
                    case redis.Subscription:
                        fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
                    case error:
                        fmt.Println(v)
                        return
                    }
                }
            }

            func testSubscribe() {
                go subscribe()
                go subscribe()
                go subscribe()
                go subscribe()
                go subscribe()

                c, err := redis.Dial("tcp""127.0.0.1:6379")
                if err != nil {
                    fmt.Println(err)
                    return
                }
                defer c.Close()

                for {
                    var s string
                    fmt.Scanln(&s)
                    _, err := c.Do("PUBLISH""redChatRoom", s)
                    if err != nil {
                        fmt.Println("pub err: ", err)
                        return
                    }
                }
            }

            func main() {
                testCommonOperate()
                //testSubscribe()
            }


            test_radixv2.go
            package main

            import (
                "fmt"
                "github.com/mediocregopher/radix.v2/redis"
                "log"
                "strconv"
            )

            func test1() {
                conn, err := redis.Dial("tcp""localhost:6379")
                if err != nil {
                    log.Fatal(err)
                    return
                }
                defer conn.Close()

                resp := conn.Cmd("HMSET""album:1""title""Electric Ladyland""artist""Jimi Hendrix""price", 4.95, "likes", 8)
                if resp.Err != nil {
                    log.Fatal(resp.Err)
                }

                fmt.Println("Electric Ladyland added!")
            }

            func test2() {
                conn, err := redis.Dial("tcp""localhost:6379")
                if err != nil {
                    log.Fatal(err)
                }
                defer conn.Close()

                title, err := conn.Cmd("HGET""album:1""title").Str()
                if err != nil {
                    log.Fatal(err)
                }

                artist, err := conn.Cmd("HGET""album:1""artist").Str()
                if err != nil {
                    log.Fatal(err)
                }

                price, err := conn.Cmd("HGET""album:1""price").Float64()
                if err != nil {
                    log.Fatal(err)
                }

                likes, err := conn.Cmd("HGET""album:1""likes").Int()
                if err != nil {
                    log.Fatal(err)
                }

                fmt.Printf("%s by %s: £%.2f [%d likes]\n", title, artist, price, likes)
            }

            type Album struct {
                Title  string
                Artist string
                Price  float64
                Likes  int
            }

            func populateAlbum(reply map[string]string) (*Album, error) {
                var err error
                ab := new(Album)
                ab.Title = reply["title"]
                ab.Artist = reply["artist"]
                ab.Price, err = strconv.ParseFloat(reply["price"], 64)
                if err != nil {
                    return nil, err
                }

                ab.Likes, err = strconv.Atoi(reply["likes"])
                if err != nil {
                    return nil, err
                }
                return ab, nil
            }

            func test3() {
                conn, err := redis.Dial("tcp""localhost:6379")
                if err != nil {
                    log.Fatal(err)
                }
                defer conn.Close()

                reply, err := conn.Cmd("HGETALL""album:1").Map()
                if err != nil {
                    log.Fatal(err)
                }

                ab, err := populateAlbum(reply)
                if err != nil {
                    log.Fatal(err)
                }

                fmt.Println(ab)
            }

            func main() {
                test1()
                //test2()
                //test3()
            }


            參考資料
            http://io.upyun.com/2016/01/28/how-to-use-redis-pool-in-go/
            http://studygolang.com/articles/4542
            https://godoc.org/github.com/garyburd/redigo/redis
            https://godoc.org/github.com/mediocregopher/radix.v2
            http://www.alexedwards.net/blog/working-with-redis

            源代碼下載
            /Files/tx7do/test_redis_go.zip

            posted on 2016-12-26 15:01 楊粼波 閱讀(847) 評論(0)  編輯 收藏 引用

            国产精品久久久香蕉| 亚洲午夜无码AV毛片久久| 亚洲国产精品一区二区久久hs| 日本久久久久久久久久| 亚洲精品无码久久久| 囯产精品久久久久久久久蜜桃| 久久人爽人人爽人人片AV| 久久免费精品一区二区| 欧美一级久久久久久久大片| 久久综合给合久久狠狠狠97色69| 97久久精品人人做人人爽| 综合久久一区二区三区| 婷婷久久综合九色综合98| 亚洲美日韩Av中文字幕无码久久久妻妇| 色婷婷综合久久久久中文| 久久国产成人亚洲精品影院| 久久亚洲精精品中文字幕| 久久se这里只有精品| 国产亚洲精品美女久久久| 亚洲精品高清一二区久久| 亚洲国产成人久久精品影视| 久久精品中文字幕一区| 97精品国产97久久久久久免费| 新狼窝色AV性久久久久久| 亚洲日韩欧美一区久久久久我| 国产精品18久久久久久vr| 伊人久久综合无码成人网| 久久夜色精品国产| 精品久久久久久国产免费了| 久久精品国产99久久久| 日韩乱码人妻无码中文字幕久久| 伊人色综合久久天天人守人婷| 久久精品国产亚洲Aⅴ香蕉| 久久国产精品久久久| 99麻豆久久久国产精品免费| 国产人久久人人人人爽| 久久久久久毛片免费播放| 欧美黑人又粗又大久久久| 日产精品久久久久久久性色| 日韩久久久久久中文人妻| av国内精品久久久久影院|