Redis 6.0.0 GA is out!

Salvatore Sanfilippo

Redis 6.0.0 正式版推出!

原文由 Salvatore Sanfilippo 發布,訂閱此部落格

終於,Redis 6.0.0 穩定版正式推出。這次從第一個候選版到最終穩定版的週期相對較短。大約花了四個月,雖然不算短,但跟我們過去的紀錄相比也不算長了 :)

所以,主要的新功能還是之前公布的那些,不過有些值得注意的變化。原有的重點包括:SSL、ACLs、RESP3、客戶端快取(Client side caching)、多執行緒 I/O、replica 上的無磁碟複製(Diskless replication)、Redis-benchmark 的叢集支援與改進的 redis-cli 叢集支援、作為 Redis 模組且處於 beta 階段的 Disque,以及 Redis Cluster Proxy(目前位於 https://github.com/RedisLabs/redis-cluster-proxy)。

那麼,除了穩定性之外,從 RC1 到今天還有哪些變化?

1. 客戶端快取在某些方面進行了重新設計,特別是捨棄了原本的 caching slot 做法,改為直接使用 key 名稱。在其他 Redis 核心團隊成員的協助下分析了各種替代方案後,最終認為這種做法更好。除此之外,這項功能也終於補上了我待辦清單中的項目,尤其是「廣播模式(broadcasting mode)」,我相信這將會是這項功能最受歡迎的使用模式之一。

使用廣播模式時,伺服器不再需要記住每個客戶端請求了哪些 key。取而代之的是,客戶端訂閱 key 的前綴:每當符合該前綴的 key 被修改時,就會收到通知。這意味著會有更多訊息(但僅限於選定的前綴),不過伺服器端則不需要耗費記憶體。此外,現在也支援 opt-in / opt-out 模式,因此未使用廣播模式的客戶端,可以精確地告訴伺服器自己會快取哪些內容,以減少失效訊息的數量。基本上,無論是需要低記憶體模式,還是需要非常精準(低頻寬)模式的場景,這項功能現在都表現得更好了。

2. 這是許多使用者長久以來的需求。現在 Redis 支援一種模式,會在用於複製的 RDB 檔案不再需要時立即將其刪除。在某些環境下,讓資料只保留在記憶體中、而不在磁碟上留存,是個不錯的做法。

3. ACL 在幾個方面變得更好了。首先,新增了 ACL LOG 指令,可以查看所有違反 ACL 的客戶端,像是存取了不該存取的指令、存取了不該存取的 key,或是驗證失敗的嘗試。這個紀錄實際上是保存在記憶體中的,所以任何外部代理程式都可以呼叫「ACL LOG」來查看發生了什麼事。這對於除錯 ACL 問題非常有用。

但我最喜歡的功能是重新實作的 ACL GENPASS。現在它改用基於 SHA256 的 HMAC,並接受一個選用的參數,讓你告訴伺服器想產生多少位元、無法被猜測的偽隨機字串。Redis 在啟動時會從 /dev/urandom 取得種子來設定內部金鑰,之後則以 counter mode 使用 HMAC 來產生其他隨機數:這樣一來,你就可以盡情使用這個 API,想呼叫多少次就呼叫多少次,因為它的速度非常快。想為你的應用程式產生一個無法被猜測的 session ID 嗎?只要呼叫 ACL GENPASS 就好。諸如此類。

4. PSYNC2 複寫協定現在也獲得了改進。Redis 將能夠更頻繁地進行部分重新同步,因為現在能夠在協定中修剪最後的 PING,讓 replica 和 master 更有可能找到共同的 offset。

5. 帶有 timeout 的 Redis 指令現在也好用多了:不僅 BLPOP 及其他以往只接受秒數的指令現在可以接受小數,實際的解析度也獲得了改進,無論連接的客戶端數量有多少,都不會比目前的「HZ」值還差。

6. RDB 檔案的載入速度現在更快了。根據檔案實際組成(較大或較小的值)不同,你可以預期有 20/30% 的提升。當有大量客戶端連線時,INFO 指令現在也更快了,這個長久以來的問題終於獲得解決。

7. 我們新增了一個指令 STRALGO,用來實作複雜的字串演算法。目前唯一已實作的是 LCS(最長共同子序列),這是一個重要的演算法,除了其他用途之外,也被用來比較冠狀病毒的 RNA(以及一般其他生物的 DNA 和 RNA)。正在發生的事情影響太過巨大,總該在 Redis 裡留下一些痕跡。

Redis 6 是 Redis 有史以來最大的一次版本更新,所以即使它已經是穩定版,也請謹慎對待,在正式上線前先針對你的工作負載進行測試。到目前為止我們還沒有發現重大問題,但還是請務必小心。隨著我們收集錯誤回報,將會盡快準備發布 Redis 6.0.1。

衷心感謝在這個版本中與我一起寫程式的每一位,以及所有贊助我個人工作(感謝 Redis Labs)和贊助其他貢獻者工作的公司(感謝其他公司)。也要大大感謝許多用心回報錯誤的人,有時還不厭其煩地在我們修改後反覆測試,或是提出了各種改進建議。

跟往常一樣,你可以在幾個地方找到 Redis 6:在 https://redis.io 下載 tarball,以及在 GitHub 儲存庫中找到標記為「6.0.0」的版本。

好好享受 Redis 6 吧,
antirez

本文章由 muse-spark-1.2-contributor 進行翻譯

留言