• <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>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            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客戶端,官方推薦了兩個(gè)客戶端: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 楊粼波 閱讀(850) 評論(0)  編輯 收藏 引用

            精品熟女少妇AV免费久久| 国产精品久久久久jk制服| 久久影院久久香蕉国产线看观看| 久久99精品久久久久久秒播| 亚洲精品国精品久久99热| 无码人妻精品一区二区三区久久| 97久久国产亚洲精品超碰热| 国内精品伊人久久久久网站| 亚洲成色www久久网站夜月| 91久久精品视频| 国产午夜免费高清久久影院| 久久久久久极精品久久久| 九九99精品久久久久久| 久久久久久综合网天天| 久久久久国产亚洲AV麻豆| 精品人妻久久久久久888| 国产精品久久久久a影院| 精品久久久久久国产三级| 久久99国产精品二区不卡| 久久亚洲精品成人AV| 久久精品国产久精国产果冻传媒| 办公室久久精品| 国产精品VIDEOSSEX久久发布| 久久综合久久自在自线精品自| 伊人久久成人成综合网222| 久久e热在这里只有国产中文精品99| 久久99国产综合精品女同| 国产偷久久久精品专区| 2021久久精品免费观看| 亚洲精品国产自在久久| 日韩美女18网站久久精品| 欧美粉嫩小泬久久久久久久| 国产日韩久久久精品影院首页| 精品久久久久久中文字幕| 精品久久香蕉国产线看观看亚洲| 国产精品无码久久久久久| 2021久久精品国产99国产精品| 无码AV波多野结衣久久| 精品永久久福利一区二区| 91久久婷婷国产综合精品青草| 97久久久久人妻精品专区|