使用这个库,让你的服务操作 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?mainimport?("context""fmt""time""github.com/rueian/rueidis" )func?main()?{client,?err?:=?rueidis.NewClient(rueidis.ClientOption{InitAddress:?[]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?myhashresp?:=?client.DoCache(ctx,?cmd.Hgetall().Key("myhash").Cache(),?time.Minute)fmt.Println(resp.IsCacheHit())?//?falsefmt.Println(resp.AsStrMap())???//?map[f:v]//?cache?hit?on?client?sideresp?=?client.DoCache(ctx,?cmd.Hgetall().Key("myhash").Cache(),?time.Minute)fmt.Println(resp.IsCacheHit())?//?truefmt.Println(resp.AsStrMap())???//?map[f:v] }DoCache()方法在底層使用服務器輔助的客戶端緩存,它有 3 個參數:
支持 OpenTelemetry 跟蹤的上下文。
Redis 命令,應該從命令生成器client.B()構建。
客戶端 TTL 與 PTTL 結合使用,以確保客戶端 TTL 不長于 Redis 端。
此外,可以使用IsCacheHit()檢查響應是否來自客戶端內存。
如果 OpenTelemetry 集成被啟用,還可以通過兩個指標:rueidis_do_cache_hits和rueidis_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 速度飞起的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软开发者的年度回顾
- 下一篇: jenkins构建触发器定时任务