1. 程式人生 > 其它 >【Redis】13.Redis6.0新功能

【Redis】13.Redis6.0新功能

1. ACL

1.1 簡介

Redis ACL是Access Control List(訪問控制列表)的縮寫,該功能允許根據可以執行的命令和可以訪問的鍵來限制某些連線。

在Redis 5版本之前,Redis安全規則只有密碼控制 還有通過rename來調整高危命令比如flushdb , KEYS* , shutdown 等。Redis 6則提供ACL的功能對使用者進行更細粒度的許可權控制 :

  1. 接入許可權:使用者名稱和密碼
  2. 可以執行的命令
  3. 可以操作的KEY

參考官網:https://redis.io/topics/acl

1.2 命令

1.2.1 acl list命令展現使用者許可權列表

1.2.2 acl cat命令

  1. 檢視新增許可權指令類別

  2. 加引數型別名可以檢視型別下具體命令

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. 其他新功能

  1. RESP3新的 Redis 通訊協議:優化服務端與客戶端之間通訊

  2. Client side caching客戶端快取:基於 RESP3 協議實現的客戶端快取功能。為了進一步提升快取的效能,將客戶端經常訪問的資料cache到客戶端。減少TCP網路互動。

  3. Proxy叢集代理模式:Proxy 功能,讓 Cluster 擁有像單例項一樣的接入方式,降低大家使用cluster的門檻。不過需要注意的是代理不改變 Cluster 的功能限制,不支援的命令還是不會支援,比如跨 slot 的多Key操作。

  4. Modules API

    Redis 6中模組API開發進展非常大,因為Redis Labs為了開發複雜的功能,從一開始就用上Redis模組。Redis可以變成一個框架,利用Modules來構建不同系統,而不需要從頭開始寫然後還要BSD許可。Redis一開始就是一個向編寫各種系統開放的平臺。