1.介绍
go-redis 三方库为我们封装了很多函数来执行 Redis 命令,而 redigo 三方库只有一个 Do 函数执行 Redis 命令,更接近使用 redis-cli 操作 Redis,这一点是我个人比较喜欢的,只要熟悉 Redis,就可以轻松使用 redigo 作为客户端操作 Redis,而不需要再去记三方库封装的函数。
2.连接池的简单实现
代码结构
.
+--- go.mod
+--- go.sum
+--- main.go
+--- pool
| +--- redis-pool.go
redis-pool
package pool
import (
"fmt"
"github.com/garyburd/redigo/redis"
"log"
)
var (
pool *redis.Pool
)
func init() {
pool = &redis.Pool{
MaxIdle: 10,
MaxActive: 5,
IdleTimeout: 100,
Dial: dialFunc,
}
client := pool.Get()
res, err := redis.String(client.Do("ping"))
if err != nil {
fmt.Println(err)
}
fmt.Println("init result:", res)
}
func dialFunc() (redis.Conn, error) {
conn, err := redis.Dial("tcp", "localhost:6370")
if err != nil {
log.Fatal(err.Error())
}
return conn, nil
}
func GetRDB() redis.Conn {
return pool.Get()
}
main
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
"go-reids-pool/pool"
)
func main() {
rdb := pool.GetRDB()
if rdb == nil {
fmt.Errorf("rdb is nil")
}
name := "zhangsan"
key := "name:zhangsan"
_, err := rdb.Do("set", key, name) // 操作如同redis-cli
if err != nil {
fmt.Println(err)
}
result , err := redis.String(rdb.Do("get", key)) // 获取结果
if err != nil {
fmt.Println(err)
}
fmt.Println("cache key: name:zhangsan, value:", result) // zhangsan
}