简介
rueidis 是一个快速的Golang Redis客户端,支持客户端缓存、Auto Pipelining、泛型OM、RedisJSON、RedisBloom、RediSearch等功能。
Features
- Auto pipelining for non-blocking redis commands
- RESP3 中的客户端缓存
- Pub/Sub, Sharded Pub/Sub, Streams
- Redis Cluster, Sentinel, RedisJSON, RedisBloom, RediSearch, RedisTimeseries, 等.
- 具有客户端缓存和乐观锁定的通用对象映射
- 具有客户端缓存的分布式锁
- rueidis mock
- OpenTelemetry 集成
- Hooks and other 集成
- 提供类似 Go-redis API 的适配器
需要注意的是由于使用了一些go1.20版本才有的特性,如果想要使用低版本go,必须安装相应的版本。
简单使用
package main
import (
"context"
"fmt"
"github.com/redis/rueidis"
)
func main() {
// 创建redis客户端连接
client, err := rueidis.NewClient(rueidis.ClientOption{InitAddress: []string{"127.0.0.1:6379"}})
if err != nil {
panic(err)
}
defer client.Close()
ctx := context.Background()
// 执行 redis set 命令
err = client.Do(ctx, client.B().Set().Key("key1").Value("val").Nx().Build()).Error()
if err != nil {
panic(err)
}
hm, err := client.Do(ctx, client.B().Get().Key("key1").Build()).ToString()
if err != nil {
panic(err)
}
fmt.Println(hm)
}
go-redis适配器
如何快速从 go-redis 切换到 rueidis 客户端呢,rueidis 提供了rueidiscompat.NewAdapter 方法,通过Adapter可以使用熟悉的go-redis中的方法。
例子:
package main
import (
"context"
"github.com/redis/rueidis"
"github.com/redis/rueidis/rueidiscompat"
"time"
)
func main() {
ctx := context.Background()
client, err := rueidis.NewClient(rueidis.ClientOption{InitAddress: []string{"127.0.0.1:6379"}})
if err != nil {
panic(err)
}
defer client.Close()
compat := rueidiscompat.NewAdapter(client)
_, _ = compat.SetNX(ctx, "key", "val", time.Second).Result()
}
基准测试
通过官方仓库的测试可以看出,相比 go-redis ,rueidis在相同环境下可以获得更高的吞吐。
小结
本文简单介绍了 go语言环境下新的redis 客户端库 rueidis,并简单的使用。