摘要:Redis 6.0 特性
點擊閱讀原文,提升閱讀體驗:https://www.modb.pro/db/22840?cyn
前言
Redis 6 RC2 於今年3月5號Release,預計今年4.30月份發布GA版本,官方網站提供 unstable 版本的供大家測試,本文基於官方文檔介紹Redis 6的重要的新特性。
作者對新特性的介紹 http://antirez.com/news/131
ACL
在Redis 5版本之前,Redis 安全規則只有密碼控制 還有通過rename 來調整高危命令比如 flushdb
, KEYS*
, shutdown
等。Redis 6 則提供ACL的功能對用戶進行更細粒度的權限控制 :
(1)接入權限:用戶名和密碼 (2)可以執行的命令 (3)可以操作的 KEY
ACL 的用法

創建用戶
127.0.0.1:6379> ACL SETUSER yangyi ##創建一個賬號yangyiOK127.0.0.1:6379> acl list1) "user default on nopass ~* +@all"2) "user yangyi off -@all"127.0.0.1:6379> AUTH yangyi(error) ERR AUTH <password> called without any password configured for the default user. Are you sure your configuration is correct?127.0.0.1:6379> ACL GETUSER yangyi ##獲取賬號yangyi的詳細情況1) "flags"2) 1) "off" #off 表示禁用,表示不能使用 yangyi 訪問redis3) "passwords"4) (empty array) #密碼為空5) "commands"6) "-@all" # -@all 表示不能使用任何命令,+@all 表示可以使用任何命令7) "keys"8) (empty array) # 不能訪問任何key127.0.0.1:6379> ACL SETUSER alice on >p1pp0 ~cached:* +getOK127.0.0.1:6379> ACL GETUSER alice1) "flags"2) 1) "on"3) "passwords"4) 1) "2d9c75273d72b32df726fb545c8a4edc719f0a95a6fd993950b10c474ad9c927"5) "commands"6) "-@all +get"7) "keys"8) 1) "cached:*"
創建一個賬號 alice 設置密碼並能只能使用 get命令訪問 cached前綴的key
> AUTH alice p1pp0OK> GET foo(error) NOPERM this user has no permissions to access one of the keys used as arguments> GET cached:1234(nil)> SET cached:1234 zap(error) NOPERM this user has no permissions to run the 'set' command or its subcommnad
更詳細的介紹 請移步
https://redis.io/topics/acl
RESP3:新的 Redis 通信協議
RESP 全稱 REdisSerializationProtocol
,是 Redis 服務端與客戶端之間通信的協議。
在 RESP2 中,所有的返回給客戶端的內容都是字符串數組的形式,不管是 list 還是 sorted set。因此客戶端需要自行去根據類型進行解析,這樣會增加了客戶端實現的復雜性。
Redis 6 開始在兼容 RESP2 的基礎上,開始支持 RESP3。新的協議具體帶來哪些變化呢? show me the code
詳細的信息請移步
http://antirez.com/news/125
Client side caching
基於 RESP3 協議實現的客戶端緩存功能。為了進一步提升緩存的性能,將客戶端經常訪問的數據cache到客戶端。減少TCP網絡交互,提升RT。不過該特性目前合並到了unstable 分支,作者說等6.0 正式GA之前,還要修改很多。我只能說 拭目以待。
推薦一篇中文blog,比較詳細介紹了 客戶端緩存的設計思路和遇到的各種問題,以及使用的具體場景。
https://www.kawabangga.com/posts/3590
https://www.robberphex.com/client-side-caching-in-redis-6/
IO多線程
對 Redis 比較熟悉的朋友 一看到這個多線程是不是很開心?不過不能開心太早。IO多線程其實指客戶端交互部分的網絡IO交互處理模塊多線程,而非執行命令多線程。作者不想將執行命令多線程是因為要避免復雜性、鎖的效率低下等等。此次支持IO多線程的設計大體如下:

圖片來自👇的公眾號文章
對該特性比較詳細的介紹 請移步 正式支持多線程!Redis 6.0與老版性能對比評測
Proxy
antirez開發了 Proxy 功能,讓 Cluster 擁有像單實例一樣的接入方式,降低大家使用cluster的門檻。不過需要注意的是代理不改變 Cluster 的功能限制,不支持的命令還是不會支持,比如跨 slot 的多Key操作。
工具支持 Cluster
其實這部分沒有特別突出的變化,Redis 5 將 redis-trib.rb
的功能集成到 redis-cli
。另外官方 redis-benchmark
工具開始支持 cluster
模式了,通過多線程的方式對多個分片進行壓測。

Modules API
Redis 6中模塊API開發進展非常大,因為Redis Labs為了開發復雜的功能,從一開始就用上Redis模塊。Redis可以變成一個框架,利用Modules來構建不同系統,而不需要從頭開始寫然后還要BSD許可。Redis一開始就是一個向編寫各種系統開放的平台。
Disque
Disque作為一個Redis Module使用足以展示Redis的模塊系統的強大。集群消息總線API、屏蔽和回復客戶端、計時器、模塊數據的AOF和RDB等等。如果你不知道Disque,看一下repo的README就足夠了。
小結
本文挑選了比較重要的 Redis 6的新功能和特性做了介紹,要全面的了解Redis 6 的進展情況可以關注作者的blog http://antirez.com/
獲取更實時的信息。
P.S. 文章大量參考,翻譯了作者的文章。如有不妥,望見諒。
相關閱讀:徹底理解Redis持久化
-The End-
