12月20號,Redis發佈了Redis6-rc1版本,做者antirez也在本身的博客中宣佈了這一消息,並對Redis6版本作了一些介紹,如下是譯文。前端
沒錯,新版本的Redis已經到了候選發佈狀態(RC版),幾個月後,你就能夠在各大應用市場看到新版本的Redis了。我想這大概是迄今爲止,Redis最接近「企業級」應用的一個版本了,有趣的是,在這以前我花了很長時間來理解什麼是企業級應用。我認爲我並不喜歡這個詞,可是它仍是有一些意義的。如今Redis能夠說是無處不在,而且仍然可以「縮小規模」:你能夠直接下載它,在30秒內完成編譯,而後在不須要進行任何配置的狀況下啓動它。可是無處不在乎味着加密和ACL之類的環境也是必需要支持的,所以Redis必需要感謝我,儘管我極力追求簡單性。git
有趣的是,Redis ACL雖然是以一種武斷的方式進行添加,但它幾乎與你在其餘系統中看到的都不同,對SSL的支持也是通過了數次迭代,以達到最終使用最有意義的想法的目的。從讓核心功能儘量簡潔的角度來看,我對這些改動仍是很滿意的。github
Redis6爲咱們帶來的不只僅是ACLs和SSL,據我所知,這是Redis發行的功能最多,也是參與人數最多的一個版本了。都有誰爲Redis6作出了貢獻呢?我生成了一個貢獻者列表(我知道這個列表很爛,我只是簡單生成了一下),他們至少有兩個commit,而且不包括合併提交。另外,因爲我不斷在這裏或那裏修復許多小東西,所以個人提交次數可能會遠超他人。redis
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 喜歡蘭花山丘
複製代碼
感謝上面各位的貢獻,這是一次很棒的團隊合做。算法
下面的列表是新功能列表:數組
如你所見,有不少比較大的改動,接下來我會選擇其中幾個進行介紹。緩存
10年以後,咱們須要一個新的協議,我在這篇博客中進行了普遍的討論:antirez.com/news/125 ,但我隨後改變了主意,因此RESP3在Redis6中是「選擇加入」。鏈接最開始是RESP2模式,只有當你使用新的HELLO命令握手時,你纔會進入新的協議模式。bash
咱們爲何須要一個新的協議呢?由於舊的語義不夠清晰。RESP3中還有一些其餘功能,但主要思想是可以直接從Redis返回複雜數據類型,而客戶端沒必要知道要轉換爲哪一種類型的數組,或者返回的數字是否可以轉換成布爾值等等。服務器
因爲RESP3不是僅有的協議,因此它的使用速度比預期要慢一些,但這也許不是一件壞事,由於這樣咱們就有足夠的時間來進行適應和調整。框架
對Redis ACLs最好對介紹就是ACL文檔自己(redis.io/topics/acl),即便它可能須要進行一些更新以匹配最近對修改。我在這裏更想討論一下使用它的動機。Redis須要ACLs是由於人們須要在更普遍的使用ACLs,以達到更好的控制客戶端能夠作的某些操做。另外一個增長ACLs的主要緣由是進行隔離,以保護數據免受應用程序錯誤的侵害。若是你的工做節點只能作BRPOPLPUSH操做,那麼新的開發人員使用FLUSHALL的機會就比較少,也可以下降生產環境執行FLUSHALL的可能性。
在Redis中ACLs的操做都是免費的,由於若是你不用它們,性能上就不會受影響,畢竟這部分開銷沒法衡量。我想這是最好的處理方法了,值得一提的是,咱們如今爲ACL提供了Redis模塊接口,所以你能夠編寫自定義身份驗證方法。
如今是2019年,立刻要到2020年了,所以有一些新的規則。惟一的問題就是如何正確執行,正確執行的前提是錯誤執行並理解其侷限性,而後對Redis鏈接進行抽象以正確執行。這項工做是在徹底沒有個人幫助下進行的,這也體現了Redis開發過程的改變。
關於客戶端緩存,我寫了一篇博客( antirez.com/news/130 ),然而我認爲這是Redis6最不成熟的功能。沒錯,服務器能夠協助你在客戶端緩存,這看起來很酷,但我想要在Redis6 GA版本出來以前對這個功能進行進一步優化。尤爲是增長一種新的模式,在這個模式下,服務器不維護客戶端的狀態或者儘可能少的維護客戶端的狀態,更多使用消息進行交互。並且,如今沒法將某些「cache slots」的過時消息合併成一個。這是一個不錯的想法,咱們將在一月份着重作這部分功能。
最終,我作到了( github.com/antirez/dis… ),我對這個結果很是滿意。
Disque做爲一個模塊確實顯示的Redis模塊系統的強大。集羣消息總線API,可以阻止和恢復客戶端,計時器,模塊私有數據的AOF和RDB控制。若是你還不知道什麼是Disque,能夠去看一下這個倉庫的README。
個人同事Fabio在這個工做中花費了幾個月的時間:github.com/artix75/red…
我想看到這個功能已經不少年了,當主題是Redis集羣支持時,客戶端的須要進行的操做老是很分散,如今咱們有了代理(還在進行中),就能夠作不少有趣的事情了。最主要的功能是爲客戶端抽象Redis集羣,就像它們正在與單個實例通訊同樣。另外一個功能就是至少在簡單且客戶端僅使用簡單命令和功能時執行多路複用。當要阻止或執行事務時,代理爲客戶端分配一組不一樣的鏈接。代理也是徹底線程級的,因此讓大部分CPU時間花在I/O上,這是一種最大化CPU使用率的好方法。你能夠查看README文件,而後試一試這個功能。
Redis6的模塊API徹底是一個新的等級了。這是Redis發展最快的部分之一,由於咱們從最開始就使用模塊系統來開發很是複雜的東西,而不只僅是瑣碎的示例。前端時間,我啓動了Disque端口,這也促使我爲模塊系統帶來新功能。如今,你能夠把Redis當作一個框架,能夠講系統做爲模塊進行編寫,避免從頭造輪子,同時也能夠得到BSD許可,Redis其實是一個能夠用來編寫系統的開放平臺。
Redis內部有很是多的優化:複製命令的方式發生了很大變化,過時使用了另外一種算法,該算法更快且緩存更明顯。
如今咱們已經有了RC1,我但願在3月末,最晚5月,你就能夠看到GA版本準備就緒。
如今,Redis6絕對是可測試的,而且遇到錯誤的機會很小。但它包含了大量的代碼更改,而且新功能由新的代碼組成,也從沒有人在生產環境中運行過這些代碼。因此若是你找到了bug,請以最好的方式描述一下發生的狀況並報告給咱們。
感謝全部人爲該版本作出貢獻的人和在接下來幾個月中幫助咱們維護它處於穩定狀態的人。
啊,我差點忘了,這是第6版的LOLWUT命令交互圖:
每次運行都會隨機生成不一樣的景觀。
正如做者所說,Redis6帶來了不少新的功能。剛發佈的版本確定不能拿到線上去玩,可是本身折騰一下,提早感覺一下也不錯。特別是RESP3和客戶端緩存都是我比較期待的。另外還有新的過時算法,這個以前沒怎麼據說,也值得研究一下。不說了,我先下爲敬。