之前为了练习golang,自己专门实现了一个redis-cli。它支持单点redis以及cluster模式,支持自定义Hook,支持设置连接池属性(最大连接数,最小空闲连接数,连接最大空闲时间等),支持心跳检查等,使用起来也比较简单。目前支持的命令还较少,后续会增加对redis各种命令的支持。另外,对一些错误的处理,对锁的使用还有很多可以优化的地方,也还有一些想法没来得及实现。如果大家有兴趣或者有一些建议或者发现错误,都可以在github上提issue给我,thanks!!!
1:获取redisCli包
go get github.com/sunmingsheng/redisCli
2:创建一个redis客户端
(1):单机模式
options := redisCli.Option{
Addr:"127.0.0.1:6379",
MaxIdleTime: time.Second * 1000,
MaxOpenConn: 30,
MaxIdleConn: 2,
}
client, err := redisCli.NewClient(options)
(2):cluster模式
options := redisCli.Option{
Cluster:[]string{
"127.0.0.1:7200",
"127.0.0.1:7201",
"127.0.0.1:7202",
"127.0.0.1:7203",
"127.0.0.1:7204",
"127.0.0.1:7205",
},
MaxIdleTime: time.Second * 10,
MaxOpenConn: 30,
MaxIdleConn: 2,
}
client, err := redisCli.NewClient(options)
3:添加自定义Hook
client.AddHook(func(cmd, res []byte, addr string) {
fmt.Println(string(cmd)) //打印命令
fmt.Println(string(res)) //打印响应
fmt.Println(addr) //打印地址
})
4:查询当前实例状态,包括ip以及空闲,工作连接池等
go func() {
for {
time.Sleep(5 * time.Second)
client.Status()
}
}()
5:其他方法的使用
fmt.Println(client.Get("age"))
fmt.Println(client.HLen("12"))
6:目前支持的redis命令
ping
set
get
del
expire
ttl
exists
incr
decr
hset
hget
hdel
hlen
hexists