简介

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,必须安装相应的版本。

简单使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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中的方法。

例子:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
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,并简单的使用。

参考