Redis 6.0 新特性概覽


摘要: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 ##創建一個賬號yangyi
OK
127.0.0.1:6379> acl list
1) "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 訪問redis
3) "passwords"
4) (empty array) #密碼為空
5) "commands"
6) "-@all" # -@all 表示不能使用任何命令,+@all 表示可以使用任何命令
7) "keys"
8) (empty array) # 不能訪問任何key
127.0.0.1:6379> ACL SETUSER alice on >p1pp0 ~cached:* +get
OK
127.0.0.1:6379> ACL GETUSER alice
1) "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 p1pp0
OK
> 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-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM