• <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>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2016年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678


            專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開(kāi)頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺(jué)尊重!!如為您帶來(lái)不便,請(qǐng)于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊(cè)

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 219202
            • 排名 - 117

            最新評(píng)論

            閱讀排行榜


            http://www.cnblogs.com/wolfred7464/p/4670864.html

            redis的client有好多好多,go語(yǔ)言的client在redis官方有兩個(gè)推薦,radix和redigo。選擇哪一個(gè)好呢?確實(shí)很糾結(jié),后來(lái)擲硬幣決定選擇redigo了。

            redis、go、redigo的安裝就不需要提了,不能強(qiáng)行增加篇幅。

            redigo使用起來(lái)很人性化,api設(shè)計(jì)的符合直覺(jué),我對(duì)redis了解較少,使用過(guò)程中基本沒(méi)有遇到障礙。

            redigo的使用入門可以去查godoc:http://godoc.org/github.com/garyburd/redigo/redis

            接下來(lái)就是毫無(wú)技術(shù)含量的貼代碼了:

            連接redis我一般是這樣寫(xiě)的:

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

            執(zhí)行命令使用Do函數(shù),跟在redis-cli敲命令的感覺(jué)差不多的:

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


            列表也是一樣:

            c.Do("lpush", "redlist", "qqq")
            c.Do("lpush", "redlist", "www")
            c.Do("lpush", "redlist", "eee")


            讀取列表可以for循環(huán)遍歷,也可以使用redis.Scan函數(shù):

            values, _ := redis.Values(c.Do("lrange", "redlist", "0", "100"))

            for _, v := range values {
                fmt.Println(string(v.([]byte)))
            }

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


            管道:

            c.Send("SET", "name", "red")
            c.Send("GET", "name")
            c.Flush()
            c.Receive()
            c.Receive()

            發(fā)布訂閱:

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


            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
                }
            }
            posted on 2016-09-22 15:41 思月行云 閱讀(3020) 評(píng)論(0)  編輯 收藏 引用 所屬分類: GolangRedis\Mongo
            国产精品久久一区二区三区| 亚洲va久久久久| 成人午夜精品无码区久久| 国内精品久久久久久麻豆| 国产亚洲色婷婷久久99精品| 欧美一区二区三区久久综| 久久婷婷五月综合97色| 精品无码久久久久国产| 99精品国产在热久久无毒不卡| 东京热TOKYO综合久久精品| 91久久精品91久久性色| 亚洲一区中文字幕久久| 精品一久久香蕉国产线看播放| 久久久久亚洲AV综合波多野结衣| 久久久人妻精品无码一区| 麻豆久久久9性大片| 日韩精品久久久肉伦网站| 久久精品九九亚洲精品| 欧美亚洲另类久久综合| 狠狠色综合网站久久久久久久| 久久精品免费网站网| 久久婷婷五月综合色奶水99啪| 日韩AV无码久久一区二区| 成人午夜精品久久久久久久小说| 久久噜噜久久久精品66| 中文精品久久久久人妻不卡| 久久91精品国产91久久麻豆| 久久久WWW免费人成精品| 久久久亚洲AV波多野结衣| AV狠狠色丁香婷婷综合久久| 欧美久久一区二区三区| 国产精品综合久久第一页| 国内精品久久久久久久久| 欧美va久久久噜噜噜久久| 国产成人AV综合久久| 亚洲欧美成人综合久久久| 免费精品99久久国产综合精品| 久久人妻AV中文字幕| 久久国产福利免费| 狠狠88综合久久久久综合网| 伊人久久大香线蕉无码麻豆|