• <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 楊粼波 閱讀(842) 評論(0)  編輯 收藏 引用

            热久久视久久精品18| 韩国三级中文字幕hd久久精品| 精品久久久久久无码人妻热| 91精品国产91热久久久久福利| 香蕉久久AⅤ一区二区三区| 精品国产乱码久久久久久呢| 久久成人国产精品| 亚洲国产成人久久精品99| 人人狠狠综合久久亚洲88| 99久久国产综合精品女同图片| 国产成人无码精品久久久久免费| 亚洲国产欧美国产综合久久| 一本综合久久国产二区| 国产一区二区三区久久精品| 国产亚洲美女精品久久久久狼| 丰满少妇人妻久久久久久4| 久久亚洲国产精品成人AV秋霞| 久久精品亚洲福利| 久久99精品久久久久久野外| 综合网日日天干夜夜久久 | 久久久久97国产精华液好用吗| 久久婷婷五月综合97色直播| 91精品国产91久久久久久蜜臀| 久久午夜伦鲁片免费无码| 亚洲国产精品高清久久久| 久久狠狠一本精品综合网| 久久香蕉一级毛片| 九九99精品久久久久久| 亚洲成色WWW久久网站| 久久亚洲AV无码精品色午夜麻豆| 亚洲国产精品久久久久网站 | 久久久久久亚洲精品无码| 国产午夜久久影院| 精品一区二区久久| 国产精品久久久福利| 国产精品欧美久久久久无广告| 久久精品国产亚洲av水果派| 精品多毛少妇人妻AV免费久久| 久久中文字幕精品| 青青草原综合久久大伊人| 99久久这里只精品国产免费|