08 Jul 2023
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() {
client, err := rueidis.NewClient(rueidis.ClientOption{InitAddress: []string{"127.0.0.1:6379"}})
if err != nil {
panic(err)
}
defer client.Close()
ctx := context.Background()
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,并简单的使用。
- https://github.com/redis/rueidis
- https://centrifugal.dev/blog/2022/12/20/improving-redis-engine-performance
- https://github.com/redis/rueidis/tree/main/rueidiscompat
- https://github.com/redis/rueidis#command-response-cheatsheet