antirez:Redis6真的來了


12月20號,Redis發布了Redis6-rc1版本,作者antirez也在自己的博客中宣布了這一消息,並對Redis6版本做了一些介紹,以下是譯文。

沒錯,新版本的Redis已經到了候選發布狀態(RC版),幾個月后,你就可以在各大應用市場看到新版本的Redis了。我想這大概是迄今為止,Redis最接近“企業級”應用的一個版本了,有趣的是,在這之前我花了很長時間來理解什么是企業級應用。我認為我並不喜歡這個詞,但是它還是有一些意義的。現在Redis可以說是無處不在,並且仍然能夠“縮小規模”:你可以直接下載它,在30秒內完成編譯,然后在不需要進行任何配置的情況下啟動它。但是無處不在意味着加密和ACL之類的環境也是必須要支持的,因此Redis必須要感謝我,盡管我極力追求簡單性。

有趣的是,Redis ACL雖然是以一種武斷的方式進行添加,但它幾乎與你在其他系統中看到的都不一樣,對SSL的支持也是經過了數次迭代,以達到最終使用最有意義的想法的目的。從讓核心功能盡可能簡潔的角度來看,我對這些改動還是很滿意的。

Redis6為我們帶來的不僅僅是ACLs和SSL,據我所知,這是Redis發行的功能最多,也是參與人數最多的一個版本了。都有誰為Redis6做出了貢獻呢?我生成了一個貢獻者列表(我知道這個列表很爛,我只是簡單生成了一下),他們至少有兩個commit,並且不包括合並提交。另外,由於我不斷在這里或那里修復許多小東西,因此我的提交次數可能會遠超他人。

685  antirez
81  zhaozhao.zz
76  Oran Agra
51  artix
28  Madelyn Olson
27  Yossi Gottlieb
15  David Carlier
14  Guy Benoish
14  Guy Korland
13  Itamar Haber
9  Angus Pearson
8  WuYunlong
8  yongman
7  vattezhang
7  Chris Lamb
5  Dvir Volk
5  meir@redislabs.com
5  chendianqiang
5  John Sully
4  dejun.xdj
4  Daniel Dai
4  Johannes Truschnigg
4  swilly22
3  Bruce Merry
3  filipecosta90
3  youjiali1995
2  James Rouzier
2  Andrey Bugaevskiy
2  Brad Solomon
2  Hamid Alaei
2  Michael Chaten
2  Steve Webster
2  Wander Hillen
2  Weiliang Li
2  Yuan Zhou
2  charsyam
2  hujie
2  jem
2  shenlongxing
2  valentino
2  zhudacai 00228490
2  喜歡蘭花山丘

感謝上面各位的貢獻,這是一次很棒的團隊合作。

下面的列表是新功能列表:

  • 很多新的模塊API
  • 更好的過期周期
  • SSL
  • ACLs
  • RESP3
  • 客戶端緩存
  • 線程I/O
  • 副本上的無盤復制
  • Redis-benchmark支持集群+Redis-cli的改進
  • 系統支持重寫
  • Redis Cluster代理與Redis6一起發布(不同倉庫)
  • Redis 6發布了Disque模塊(不同倉庫)

如你所見,有很多比較大的改動,接下來我會選擇其中幾個進行介紹。

RESP3

10年之后,我們需要一個新的協議,我在這篇博客中進行了廣泛的討論:http://antirez.com/news/125,但我隨后改變了主意,所以RESP3在Redis6中是“選擇加入”。連接最開始是RESP2模式,只有當你使用新的HELLO命令握手時,你才會進入新的協議模式。

我們為什么需要一個新的協議呢?因為舊的語義不夠清晰。RESP3中還有一些其他功能,但主要思想是能夠直接從Redis返回復雜數據類型,而客戶端不必知道要轉換為哪種類型的數組,或者返回的數字是否能夠轉換成布爾值等等。

由於RESP3不是僅有的協議,所以它的使用速度比預期要慢一些,但這也許不是一件壞事,因為這樣我們就有足夠的時間來進行適應和調整。

ACLs

對Redis ACLs最好對介紹就是ACL文檔本身(https://redis.io/topics/acl),即使它可能需要進行一些更新以匹配最近對修改。我在這里更想討論一下使用它的動機。Redis需要ACLs是因為人們需要在更廣泛的使用ACLs,以達到更好的控制客戶端可以做的某些操作。另一個增加ACLs的主要原因是進行隔離,以保護數據免受應用程序錯誤的侵害。如果你的工作節點只能做BRPOPLPUSH操作,那么新的開發人員使用FLUSHALL的機會就比較少,也能夠降低生產環境執行FLUSHALL的可能性。

在Redis中ACLs的操作都是免費的,因為如果你不用它們,性能上就不會受影響,畢竟這部分開銷無法衡量。我想這是最好的處理方法了,值得一提的是,我們現在為ACL提供了Redis模塊接口,因此你可以編寫自定義身份驗證方法。

SSL

現在是2019年,馬上要到2020年了,因此有一些新的規則。唯一的問題就是如何正確執行,正確執行的前提是錯誤執行並理解其局限性,然后對Redis連接進行抽象以正確執行。這項工作是在完全沒有我的幫助下進行的,這也體現了Redis開發過程的改變。

客戶端緩存

關於客戶端緩存,我寫了一篇博客(http://antirez.com/news/130),然而我認為這是Redis6最不成熟的功能。沒錯,服務器可以協助你在客戶端緩存,這看起來很酷,但我想要在Redis6 GA版本出來之前對這個功能進行進一步優化。尤其是增加一種新的模式,在這個模式下,服務器不維護客戶端的狀態或者盡量少的維護客戶端的狀態,更多使用消息進行交互。而且,現在無法將某些“cache slots”的過期消息合並成一個。這是一個不錯的想法,我們將在一月份着重做這部分功能。

Disque成為一個模塊

最終,我做到了(https://github.com/antirez/disque-module),我對這個結果非常滿意。

Disque作為一個模塊確實顯示的Redis模塊系統的強大。集群消息總線API,能夠阻止和恢復客戶端,計時器,模塊私有數據的AOF和RDB控制。如果你還不知道什么是Disque,可以去看一下這個倉庫的README。

集群代理

我的同事Fabio在這個工作中花費了幾個月的時間:https://github.com/artix75/redis-cluster-proxy

我想看到這個功能已經很多年了,當主題是Redis集群支持時,客戶端的需要進行的操作總是很分散,現在我們有了代理(還在進行中),就可以做很多有趣的事情了。最主要的功能是為客戶端抽象Redis集群,就像它們正在與單個實例通信一樣。另一個功能就是至少在簡單且客戶端僅使用簡單命令和功能時執行多路復用。當要阻止或執行事務時,代理為客戶端分配一組不同的連接。代理也是完全線程級的,所以讓大部分CPU時間花在I/O上,這是一種最大化CPU使用率的好方法。你可以查看README文件,然后試一試這個功能。

Modules

Redis6的模塊API完全是一個新的等級了。這是Redis發展最快的部分之一,因為我們從最開始就使用模塊系統來開發非常復雜的東西,而不僅僅是瑣碎的示例。前端時間,我啟動了Disque端口,這也促使我為模塊系統帶來新功能。現在,你可以把Redis看成一個框架,可以講系統作為模塊進行編寫,避免從頭造輪子,同時也可以獲得BSD許可,Redis實際上是一個可以用來編寫系統的開放平台。

內部

Redis內部有非常多的優化:復制命令的方式發生了很大變化,過期使用了另一種算法,該算法更快且緩存更明顯。

Status和ETA

現在我們已經有了RC1,我希望在3月末,最晚5月,你就可以看到GA版本准備就緒。

現在,Redis6絕對是可測試的,並且遇到錯誤的機會很小。但它包含了大量的代碼更改,並且新功能由新的代碼組成,也從沒有人在生產環境中運行過這些代碼。所以如果你找到了bug,請以最好的方式描述一下發生的情況並報告給我們。

感謝所有人為該版本做出貢獻的人和在接下來幾個月中幫助我們維護它處於穩定狀態的人。

啊,我差點忘了,這是第6版的LOLWUT命令交互圖:

lolwut6

每次運行都會隨機生成不同的景觀。

博客原文地址

http://antirez.com/news/131

譯者注

正如作者所說,Redis6帶來了很多新的功能。剛發布的版本肯定不能拿到線上去玩,但是自己折騰一下,提前感受一下也不錯。特別是RESP3和客戶端緩存都是我比較期待的。另外還有新的過期算法,這個之前沒怎么聽說,也值得研究一下。不說了,我先下為敬。


免責聲明!

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



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