golang redis客戶端
阿新 • • 發佈:2018-12-08
前言:
golang操作redis主要有兩個庫,go-redis和redigo。兩者操作都比較簡單,區別是:redigo更像一個client,執行各種操作都是通過Do函式去做的;redis-go對函式的封裝更好。golang官方推薦使用redigo,所以專案中我使用了redigo。
1. 安裝redigo程式碼包
go get github.com/gomodule/redigo/redis
2. 連線到redis server
package redisTool import ( "time" "github.com/gomodule/redigo/redis" ) var RedisClientPool *redis.Pool func InitRedis() { var ( host string auth string db int ) host = "127.0.0.1:6379" auth = "abc" //redis connect密碼 db = 1 RedisClientPool = &redis.Pool{ MaxIdle: 10, MaxActive: 20, IdleTimeout: 180, Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", host, redis.DialPassword(auth), redis.DialDatabase(db)) if nil != err { return nil, err } return c, nil }, TestOnBorrow: func(c redis.Conn, t time.Time) error { if time.Since(t) < time.Minute { return nil } _, err := c.Do("PING") return err }, } }
3. 操作redis
package main import ( "fmt" "redisTool" "github.com/gomodule/redigo/redis" ) func main() { redisTool.InitRedis() redisClient := redisTool.RedisClientPool.Get(); defer redisClient.Close() redisKey := "strKeyRedisEx" resSetValue, err := redis.String(redisClient.Do("setex", redisKey, 600, 1)) if err != nil { msg := fmt.Sprintf("fail to set redis key=%s, error:%s", redisKey, err.Error()) fmt.Println(msg) } else { msg := fmt.Sprintf("succeed to set redis key=%s, value=%#v", redisKey, resSetValue) fmt.Println(msg) } redisValue, err := redis.String(redisClient.Do("GET", redisKey)) if err != nil { msg := fmt.Sprintf("fail to get content by redis key=%s, error:%s", redisKey, err.Error()) fmt.Println(msg) } else { msg := fmt.Sprintf("succeed to get content by redis key=%s, value=%#v", redisKey, redisValue) fmt.Println(msg) } strRedisValue, err := redis.String(redisClient.Do("PING")) if err != nil { msg := fmt.Sprintf("fail to ping, error:%s", err.Error()) fmt.Println(msg) } else { msg := fmt.Sprintf("succeed to ping, value=%#v", strRedisValue) fmt.Println(msg) } }
執行結果如下:
succeed to set redis key=strKeyRedisEx, value="OK"
succeed to get content by redis key=strKeyRedisEx, value="1"
succeed to ping, value="PONG"