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

            青青草原综合久久大伊人| 久久热这里只有精品在线观看| 久久大香香蕉国产| 久久99国产精品一区二区| 久久99久久成人免费播放| 亚洲午夜无码AV毛片久久| 久久久无码精品亚洲日韩按摩| 久久电影网一区| 色偷偷88欧美精品久久久| 久久大香香蕉国产| 久久久高清免费视频| 99国内精品久久久久久久| 亚洲精品无码久久千人斩| 久久精品99无色码中文字幕| 久久精品毛片免费观看| 欧美久久天天综合香蕉伊| 狠狠狠色丁香婷婷综合久久五月 | 免费国产99久久久香蕉| 久久精品无码一区二区WWW| 91精品国产91久久久久久青草 | 日韩精品久久久久久免费| 久久青青草原亚洲av无码| 一本一道久久精品综合| 久久久国产精品亚洲一区| 久久99九九国产免费看小说| 精品久久久久久无码免费| 99久久综合狠狠综合久久止| 日韩AV无码久久一区二区 | 日韩精品久久久久久免费| 亚洲欧美伊人久久综合一区二区| 婷婷久久综合| 久久人人爽人人爽人人爽| 久久影视综合亚洲| 精品无码久久久久久久久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲婷婷国产精品电影人久久 | 亚洲伊人久久综合中文成人网| 久久精品无码一区二区三区日韩 | 品成人欧美大片久久国产欧美| 国产一久久香蕉国产线看观看| 97久久超碰成人精品网站|