Redis 6.0.0 正式版發布!
終於,Redis 6.0.0 穩定版正式釋出了。這次從首個候選版(release candidate)釋出到最終穩定版之間的週期相對較短。大約花了四個月,時間不算短,但與我們過去的紀錄相比也不算長 :)
因此,主要的亮點仍是先前公布的那些,但有一些值得注意的變更。原有的內容包括:SSL、ACL、RESP3、Client side caching(用戶端快取)、Threaded I/O(多執行緒 I/O)、Diskless replication(無碟複製)(用於複本)、Redis-benchmark 的 Cluster support(叢集支援)以及改進的 redis-cli 叢集支援、以 Redis 模組形式提供、目前處於測試階段的 Disque,以及 Redis Cluster Proxy(目前位於 https://github.com/RedisLabs/redis-cluster-proxy)。
那麼,除了穩定性之外,從 RC1 到今天究竟有哪些變化呢?
1. Client side caching 在某些層面進行了重新設計,特別是捨棄了快取槽(caching slot)的做法,改為直接使用鍵名(key names)。在其他 Redis 核心團隊成員的協助下分析各種替代方案後,最終認為這種做法更為理想。除此之外,這項功能也終於補上了我原本列在待辦清單中的項目,特別是「broadcasting mode(廣播模式)」,我相信這將會是此功能最受歡迎的使用模式之一。
使用廣播(broadcasting)時,伺服器不再嘗試記住每個用戶端請求了哪些鍵。取而代之的是,用戶端訂閱鍵的前綴:每當符合該前綴的鍵被修改時,就會收到通知。這意味著會有更多的訊息(但僅限於所選的前綴),不過伺服器端不再需要耗費記憶體。此外,現在也支援 opt-in / opt-out 模式,因此未使用廣播模式的用戶端可以精確地告知伺服器自己將會快取哪些內容,以減少失效(invalidation)訊息的數量。基本上,這項功能現在無論是在需要低記憶體的模式,或是需要高度選擇性(低頻寬)的模式下,表現都好得多。
2. 這是許多使用者長久以來的需求。現在 Redis 支援一種模式,會在用於複製的 RDB 檔案不再有用時立即將其刪除。在某些環境中,讓資料僅保留在記憶體中、而不留在磁碟上是比較理想的做法。
3. ACL 在幾個方面有所改進。首先,有一個新的 ACL LOG 指令,可以查看所有違反 ACL 的用戶端,包括存取了不該存取的指令、存取了不該存取的鍵,或是驗證失敗的嘗試。該日誌實際上保存在記憶體中,因此任何外部代理程式都可以呼叫「ACL LOG」來查看發生了什麼事。這對於除錯 ACL 問題非常有用。
不過我最喜歡的功能是重新實作的 ACL GENPASS。現在它採用基於 SHA256 的 HMAC,並接受一個選用參數,讓你告訴伺服器想要產生多少位元、無法被猜測的擬隨機(pseudo random)字串。Redis 在啟動時會從 /dev/urandom 播種(seed)一把內部金鑰,之後便以計數器模式(counter mode)使用 HMAC 來產生其他的亂數:如此一來,你可以盡情地使用這個 API,隨時呼叫,因為它的速度非常快。想要為你的應用程式產生一個無法猜測的工作階段 ID(session ID)嗎?只要呼叫 ACL GENPASS 就行了。諸如此類。
4. PSYNC2,也就是複寫協定,現在已獲得改進。Redis 將能夠更頻繁地進行部分重新同步(partial resynchronization),因為現在能夠在協定中修剪最後的 PING,使複本與主節點更有可能找到共同的位移(offset)。
5. 帶有逾時(timeout)的 Redis 指令現在好用多了:不僅原本只接受秒數的 BLPOP 等指令現在接受小數,實際的解析度也已改進,無論連接的用戶端數量多寡,都不會比目前的「HZ」值還差。
6. RDB 檔案現在載入得更快。根據檔案的實際組成(較大或較小的值),你可以預期有 20/30% 的效能提升。當有大量用戶端連線時,INFO 指令現在也更快了,這個長久以來的問題終於獲得解決。
7. 我們新增了一個指令 STRALGO,用於實作複雜的字串演算法。目前唯一已實作的是 LCS(longest common subsequence,最長共同子序列),這是一個重要的演算法,除了其他用途之外,也用於比較冠狀病毒的 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(安提瑞茲)
隨機一篇部落格