使用这个库,让你的服务操作 Redis 速度飞起

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用这个库,让你的服务操作 Redis 速度飞起相关的知识,希望对你有一定的参考价值。

点击上方蓝字关注 👆👆

没领红包封面的可以在文末领取


大多数人使用 Redis 作为远程缓存存储,因为它速度快。Redis6 通过消除不必要的网络往返,可以使其更快。

服务器辅助的客户端缓存

这个方法很简单。Redis6 会记录客户端请求的键值,并在键值发生变化时通知客户端。

因此,客户端现在可以重用响应,而不需要通过网络查询 Redis,直到收到相应的无效通知。这个新特性称为服务器辅助的客户端缓存。

具体可参考: redis 官方文档[1]

尽管这项技术很简单,但它需要升级到新的 RESP3 协议,或者在 RESP2 Pub/Sub 通道上做个小技巧来接收通知。对于现有的客户端库来说,实现这两个选项都不容易。

自 2020 年发布 Redis 6 以来,这已经是近两年前的事情了。现有的 Golang 客户端库中仍然很难使用这个强大的新功能。因此,有了下面这个新的客户端实现。

Rueidis[2]

一个快速 Golang Redis RESP3 客户端,实现自动流水线,支持客户端缓存。

多亏了 RESP3 的简单性和自动流水线技术。新的客户端库通常比现有的客户端库有更高的吞吐量。下面是我的 Macbook M1 Pro 的基准对比。

更多请查看 完整基准测试源代码[3]

如果缓存命中,服务器辅助的客户端缓存可以执行得非常好,因为没有网络交换。它只需要大约165ns平均检索记录从客户端内存缓存。

即使没有客户端缓存,在本地基准测试上也可以实现14x的吞吐量。请参见parallelism(64)-key(16)-value(64)-10的情况。

示例

go get github.com/rueian/rueidis

下面是一个如何在新的客户端库中使用服务器辅助的客户端缓存的例子:

package main

import (
 "context"
 "fmt"
 "time"

 "github.com/rueian/rueidis"
)

func main() 
 client, err := rueidis.NewClient(rueidis.ClientOptionInitAddress: []string"127.0.0.1:6379")
 if err != nil 
  panic(err)
 
 defer client.Close()

 cmd := client.B()
 ctx := context.Background()

 // HSET myhash f v
 _ = client.Do(ctx, cmd.Hset().Key("myhash").FieldValue().FieldValue("f", "v").Build()).Error()
 // HGETALL myhash
 resp := client.DoCache(ctx, cmd.Hgetall().Key("myhash").Cache(), time.Minute)
 fmt.Println(resp.IsCacheHit()) // false
 fmt.Println(resp.AsStrMap())   // map[f:v]
 // cache hit on client side
 resp = client.DoCache(ctx, cmd.Hgetall().Key("myhash").Cache(), time.Minute)
 fmt.Println(resp.IsCacheHit()) // true
 fmt.Println(resp.AsStrMap())   // map[f:v]

DoCache()方法在底层使用服务器辅助的客户端缓存,它有 3 个参数:

  1. 支持 OpenTelemetry 跟踪的上下文。

  2. Redis 命令,应该从命令生成器client.B()构建。

  3. 客户端 TTL 与 PTTL 结合使用,以确保客户端 TTL 不长于 Redis 端。

此外,可以使用IsCacheHit()检查响应是否来自客户端内存。

如果 OpenTelemetry 集成被启用,还可以通过两个指标:rueidis_do_cache_hitsrueidis_do_cache_miss来观察缓存命中率。

Rueidis 还支持其他功能,如 Redis 集群,Pub/Sub, Streams, Lua, Transaction。

还支持流行的 Redis 模块。例如: RedisBloom, RedisJSON, RediSearch, RedisTimeseries。

参考资料

[1]

redis 官方文档: https://redis.io/topics/client-side-caching

[2]

Rueidis: https://github.com/rueian/rueidis

[3]

完整基准测试源代码: https://github.com/rueian/rueidis-benchmark

点个在看集群永保稳定👇

以上是关于使用这个库,让你的服务操作 Redis 速度飞起的主要内容,如果未能解决你的问题,请参考以下文章

IDEA的基本使用:让你的IDEA有飞一般的感觉 | CSDN 博文精选

解密飞桨多任务学习框架PALM,让你的模型开启“学霸”模式

解密飞桨多任务学习框架PALM,让你的模型开启“学霸”模式

IDEA配置:让你的IDEA有飞一般的感觉

今日头条运营秘诀分享:让你的文章阅读量和收入都“飞”起来

SOD让你的旧代码焕发青春