Redis之父Salvatore Sanfilippo在自己的部落格,發布了Redis 6正式版釋出的消息,並且解釋了正式版與第一候選版之間的差異。Redis 6加入了許多新功能,包括RESP3、客戶端快取、多執行緒I/O、SSL加密和ACL等,Salvatore Sanfilippo表示,雖然這是史上最大的版本,但也是最多人參與開發的一個版本,從第一候選版到最終版本,花費的時間比起過去的版本還要短。

Salvatore Sanfilippo認為Redis 6中最重要的更新,便是新的Redis協定RESP3,RESP3帶來了更豐富的功能,使得介面函式庫可以更好地映射主機語言中各類型的Redis回應,此外,新協定還為客戶端函式庫瘦身鋪路,最終將可讓用戶更快速地採用指令和模組。

而且由於新協定RESP3的出現,Redis才得以支援客戶端快取(Client Side Caching)功能。當客戶端需要能夠快速儲存資料或是快取操作時,便需要在客戶端儲存一小部分資訊,以減少應用程式擷取資料的延遲,但要達到這個目的,系統必須要能夠控制資料的有效性,RESP3讓伺服器能夠對客戶端發送資料失效訊息,讓儲存在客戶端記憶體中過時的資料失效。這個功能在不少資料庫都有提供,而Redis終於在第6版本更新協定,新增客戶端快取功能。

Salvatore Sanfilippo提到,在發布第一候選版之後,他們重新設計了客戶端快取,使用鍵值名稱來實作,由於這個方法比原先的更好,因此連積壓的功能廣播模式也都完成了,用戶在使用廣播模式時,伺服器不會儲存每個客戶端請求的鍵值,而是由客戶端訂閱鍵值前綴,當有與前綴相符的修改才會收到通知,也就是說伺服器能夠提供更多的訊息,但是伺服器的記憶體消耗不會因此增加。

而且客戶端也能夠選擇退出廣播模式,將快取的內容準確的告訴伺服器,以減少無效訊息的數量。新方法無論是在低記憶體或是低頻寬需求,都能夠運作得更好。

Redis 6支援了存取控制列表(Access Control List,ACL),賦予Redis具有使用者的概念,每個使用者擁有一組定義的功能,這些功能指示使用者能夠執行的命令還有鍵值。目前Java、Node.js、Python和.NET中的Redis客戶端都已經支援ACL,官方表示,由於Redis 6已經正式發布,他們會加速其他語言的支援。

正式版比第一候選版,還多了一個ACL LOG指令,該指令能呈現所有違反ACL的客戶端,像是存取不應該存取的指令,或是嘗試失敗的身份驗證。日誌本身是存在記憶體中,每個外部代理都能夠呼叫ACL LOG查看已發生的事件,對於ACL除錯很有幫助。

除了ACL,Redis 6還支援了SSL加密流量的功能,在這版本之前,Redis的加密都必須在程序之外進行,也就是說需要使用其他應用程式來進行加密,官方提到,更糟糕的是,有許多執行個體乾脆不加密,因此Redis 6提供SSL,可以說是在安全性上向前進了重要的一步。

另外,由於Redis一直是單執行緒基礎架構,因此不少用戶也提出要求,希望Redis能支援多執行緒,藉以進一步提升效能,因此在Redis 6中,雖然核心的部分仍保留單執行緒資料存取介面,但是在I/O的部分已經是多執行緒。透過使用不同的執行緒來處理讀取和寫入工作,讓Redis程序可以將更多的運算資源放到操作、儲存和檢索資料中,進而提升整體效能。


Advertisement

更多 iThome相關內容