【Redis】13.Redis6.0新功能
1. ACL
1.1 簡介
Redis ACL是Access Control List(訪問控制列表)的縮寫,該功能允許根據可以執行的命令和可以訪問的鍵來限制某些連線。
在Redis 5版本之前,Redis安全規則只有密碼控制 還有通過rename來調整高危命令比如flushdb , KEYS* , shutdown 等。Redis 6則提供ACL的功能對使用者進行更細粒度的許可權控制 :
- 接入許可權:使用者名稱和密碼
- 可以執行的命令
- 可以操作的KEY
參考官網:https://redis.io/topics/acl
1.2 命令
1.2.1 acl list命令展現使用者許可權列表
1.2.2 acl cat命令
-
檢視新增許可權指令類別
-
加引數型別名可以檢視型別下具體命令
1.2.3 acl whoami命令檢視當前使用者
1.2.4 aclsetuser命令建立和編輯使用者ACL
1.2.4.1 ACL規則
下面是有效ACL規則的列表。某些規則只是用於啟用或刪除標誌,或對使用者ACL執行給定更改的單個單詞。其他規則是字元字首,它們與命令或類別名稱、鍵模式等連線在一起。
1.2.4.2 通過命令建立新使用者預設許可權
acl setuser user1
在上面的示例中,沒有指定任何規則。如果使用者不存在,這將使用just created的預設屬性來建立使用者。如果使用者已經存在,則上面的命令將不執行任何操作。
1.2.4.3 設定有使用者名稱、密碼、ACL許可權、並啟用的使用者
acl setuser user2 on >password ~cached:* +get
1.2.4.4 切換使用者,驗證許可權
2. IO多執行緒
2.1 簡介
IO多執行緒其實指客戶端互動部分的網路IO互動處理模組多執行緒,而非執行命令多執行緒。Redis6執行命令依然是單執行緒。
2.2 原理架構
Redis 6 加入多執行緒,但跟Memcached這種從IO處理到資料訪問多執行緒的實現模式有些差異。Redis的多執行緒部分只是用來處理網路資料的讀寫和協議解析,執行命令仍然是單執行緒。之所以這麼設計是不想因為多執行緒而變得複雜,需要去控制 key、lua、事務,LPUSH/LPOP 等等的併發問題。整體的設計大體如下:
另外,多執行緒IO預設也是不開啟的,需要再配置檔案中配置:
io-threads-do-reads yes
io-threads 4
3. 工具支援Cluster
之前老版Redis想要搭叢集需要單獨安裝ruby環境,Redis 5將redis-trib.rb的功能整合到redis-cli。另外官方redis-benchmark工具開始支援cluster模式了,通過多執行緒的方式對多個分片進行壓測。
4. 其他新功能
-
RESP3新的 Redis 通訊協議:優化服務端與客戶端之間通訊
-
Client side caching客戶端快取:基於 RESP3 協議實現的客戶端快取功能。為了進一步提升快取的效能,將客戶端經常訪問的資料cache到客戶端。減少TCP網路互動。
-
Proxy叢集代理模式:Proxy 功能,讓 Cluster 擁有像單例項一樣的接入方式,降低大家使用cluster的門檻。不過需要注意的是代理不改變 Cluster 的功能限制,不支援的命令還是不會支援,比如跨 slot 的多Key操作。
-
Modules API
Redis 6中模組API開發進展非常大,因為Redis Labs為了開發複雜的功能,從一開始就用上Redis模組。Redis可以變成一個框架,利用Modules來構建不同系統,而不需要從頭開始寫然後還要BSD許可。Redis一開始就是一個向編寫各種系統開放的平臺。