• <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)  編輯 收藏 引用

            久久精品国产精品青草| 一本一本久久a久久综合精品蜜桃| 久久只有这里有精品4| 中文字幕亚洲综合久久| 女人香蕉久久**毛片精品| 69国产成人综合久久精品| 久久se精品一区精品二区| 久久综合九色综合精品| 久久精品成人免费国产片小草| 色99久久久久高潮综合影院| 国产成人综合久久精品红| 伊人久久综合成人网| 国产亚洲欧美成人久久片| 久久99久久无码毛片一区二区| 久久强奷乱码老熟女| 日韩精品久久无码中文字幕| 久久99热狠狠色精品一区| 日本欧美国产精品第一页久久| 久久精品成人欧美大片| 91精品国产91久久| 久久WWW免费人成一看片| 久久婷婷综合中文字幕| 一级做a爰片久久毛片看看| 国产精品无码久久综合| 日本精品久久久久影院日本| 72种姿势欧美久久久久大黄蕉| 一本综合久久国产二区| 中文字幕成人精品久久不卡| 一本色道久久88—综合亚洲精品| 91精品国产综合久久四虎久久无码一级 | 精品久久久久久国产潘金莲| 婷婷综合久久狠狠色99h| 色老头网站久久网| 久久国产精品-久久精品| 久久精品国产男包| 色婷婷噜噜久久国产精品12p| 久久精品亚洲精品国产色婷| 久久综合九色综合网站| 久久一区二区三区免费| 国产精品久久久久AV福利动漫| 中文精品久久久久人妻|