Redis 6.0 新特性概覽
- 2020 年 3 月 26 日
- 筆記
前言
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/
獲取更實時的資訊。