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 來調整高危命令比如 flushdbKEYS*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/ 獲取更實時的資訊。