前言:
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"