12月20號,Redis發(fā)布了Redis6-rc1版本哈踱,作者antirez也在自己的博客中宣布了這一消息撒顿,并對Redis6版本做了一些介紹,以下是譯文肴捉。
沒錯,新版本的Redis已經(jīng)到了候選發(fā)布狀態(tài)(RC版)叔收,幾個月后,你就可以在各大應(yīng)用市場看到新版本的Redis了傲隶。我想這大概是迄今為止饺律,Redis最接近“企業(yè)級”應(yīng)用的一個版本了,有趣的是跺株,在這之前我花了很長時間來理解什么是企業(yè)級應(yīng)用复濒。我認(rèn)為我并不喜歡這個詞,但是它還是有一些意義的∑故。現(xiàn)在Redis可以說是無處不在巧颈,并且仍然能夠“縮小規(guī)模”:你可以直接下載它袖扛,在30秒內(nèi)完成編譯砸泛,然后在不需要進(jìn)行任何配置的情況下啟動它。但是無處不在意味著加密和ACL之類的環(huán)境也是必須要支持的蛆封,因此Redis必須要感謝我唇礁,盡管我極力追求簡單性。
有趣的是惨篱,Redis ACL雖然是以一種武斷的方式進(jìn)行添加盏筐,但它幾乎與你在其他系統(tǒng)中看到的都不一樣,對SSL的支持也是經(jīng)過了數(shù)次迭代砸讳,以達(dá)到最終使用最有意義的想法的目的琢融。從讓核心功能盡可能簡潔的角度來看,我對這些改動還是很滿意的簿寂。
Redis6為我們帶來的不僅僅是ACLs和SSL漾抬,據(jù)我所知,這是Redis發(fā)行的功能最多常遂,也是參與人數(shù)最多的一個版本了奋蔚。都有誰為Redis6做出了貢獻(xiàn)呢?我生成了一個貢獻(xiàn)者列表(我知道這個列表很爛,我只是簡單生成了一下)泊碑,他們至少有兩個commit坤按,并且不包括合并提交。另外馒过,由于我不斷在這里或那里修復(fù)許多小東西臭脓,因此我的提交次數(shù)可能會遠(yuǎn)超他人。
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 喜歡蘭花山丘
感謝上面各位的貢獻(xiàn)腹忽,這是一次很棒的團隊合作来累。
下面的列表是新功能列表:
- 很多新的模塊API
- 更好的過期周期
- SSL
- ACLs
- RESP3
- 客戶端緩存
- 線程I/O
- 副本上的無盤復(fù)制
- Redis-benchmark支持集群+Redis-cli的改進(jìn)
- 系統(tǒng)支持重寫
- Redis Cluster代理與Redis6一起發(fā)布(不同倉庫)
- Redis 6發(fā)布了Disque模塊(不同倉庫)
如你所見,有很多比較大的改動窘奏,接下來我會選擇其中幾個進(jìn)行介紹嘹锁。
RESP3
10年之后,我們需要一個新的協(xié)議着裹,我在這篇博客中進(jìn)行了廣泛的討論:http://antirez.com/news/125领猾,但我隨后改變了主意,所以RESP3在Redis6中是“選擇加入”骇扇。連接最開始是RESP2模式摔竿,只有當(dāng)你使用新的HELLO命令握手時,你才會進(jìn)入新的協(xié)議模式少孝。
我們?yōu)槭裁葱枰粋€新的協(xié)議呢继低?因為舊的語義不夠清晰。RESP3中還有一些其他功能稍走,但主要思想是能夠直接從Redis返回復(fù)雜數(shù)據(jù)類型袁翁,而客戶端不必知道要轉(zhuǎn)換為哪種類型的數(shù)組,或者返回的數(shù)字是否能夠轉(zhuǎn)換成布爾值等等婿脸。
由于RESP3不是僅有的協(xié)議梦裂,所以它的使用速度比預(yù)期要慢一些,但這也許不是一件壞事盖淡,因為這樣我們就有足夠的時間來進(jìn)行適應(yīng)和調(diào)整年柠。
ACLs
對Redis ACLs最好對介紹就是ACL文檔本身(https://redis.io/topics/acl),即使它可能需要進(jìn)行一些更新以匹配最近對修改褪迟。我在這里更想討論一下使用它的動機冗恨。Redis需要ACLs是因為人們需要在更廣泛的使用ACLs,以達(dá)到更好的控制客戶端可以做的某些操作味赃。另一個增加ACLs的主要原因是進(jìn)行隔離掀抹,以保護(hù)數(shù)據(jù)免受應(yīng)用程序錯誤的侵害。如果你的工作節(jié)點只能做BRPOPLPUSH操作心俗,那么新的開發(fā)人員使用FLUSHALL的機會就比較少傲武,也能夠降低生產(chǎn)環(huán)境執(zhí)行FLUSHALL的可能性蓉驹。
在Redis中ACLs的操作都是免費的,因為如果你不用它們揪利,性能上就不會受影響态兴,畢竟這部分開銷無法衡量。我想這是最好的處理方法了疟位,值得一提的是瞻润,我們現(xiàn)在為ACL提供了Redis模塊接口,因此你可以編寫自定義身份驗證方法甜刻。
SSL
現(xiàn)在是2019年绍撞,馬上要到2020年了,因此有一些新的規(guī)則得院。唯一的問題就是如何正確執(zhí)行傻铣,正確執(zhí)行的前提是錯誤執(zhí)行并理解其局限性,然后對Redis連接進(jìn)行抽象以正確執(zhí)行祥绞。這項工作是在完全沒有我的幫助下進(jìn)行的非洲,這也體現(xiàn)了Redis開發(fā)過程的改變。
客戶端緩存
關(guān)于客戶端緩存就谜,我寫了一篇博客(http://antirez.com/news/130),然而我認(rèn)為這是Redis6最不成熟的功能里覆。沒錯丧荐,服務(wù)器可以協(xié)助你在客戶端緩存,這看起來很酷喧枷,但我想要在Redis6 GA版本出來之前對這個功能進(jìn)行進(jìn)一步優(yōu)化虹统。尤其是增加一種新的模式,在這個模式下隧甚,服務(wù)器不維護(hù)客戶端的狀態(tài)或者盡量少的維護(hù)客戶端的狀態(tài)车荔,更多使用消息進(jìn)行交互。而且戚扳,現(xiàn)在無法將某些“cache slots”的過期消息合并成一個忧便。這是一個不錯的想法,我們將在一月份著重做這部分功能帽借。
Disque成為一個模塊
最終珠增,我做到了(https://github.com/antirez/disque-module),我對這個結(jié)果非常滿意砍艾。
Disque作為一個模塊確實顯示的Redis模塊系統(tǒng)的強大蒂教。集群消息總線API,能夠阻止和恢復(fù)客戶端脆荷,計時器凝垛,模塊私有數(shù)據(jù)的AOF和RDB控制懊悯。如果你還不知道什么是Disque,可以去看一下這個倉庫的README梦皮。
集群代理
我的同事Fabio在這個工作中花費了幾個月的時間:https://github.com/artix75/redis-cluster-proxy
我想看到這個功能已經(jīng)很多年了炭分,當(dāng)主題是Redis集群支持時,客戶端的需要進(jìn)行的操作總是很分散届氢,現(xiàn)在我們有了代理(還在進(jìn)行中)欠窒,就可以做很多有趣的事情了。最主要的功能是為客戶端抽象Redis集群退子,就像它們正在與單個實例通信一樣岖妄。另一個功能就是至少在簡單且客戶端僅使用簡單命令和功能時執(zhí)行多路復(fù)用。當(dāng)要阻止或執(zhí)行事務(wù)時寂祥,代理為客戶端分配一組不同的連接荐虐。代理也是完全線程級的,所以讓大部分CPU時間花在I/O上丸凭,這是一種最大化CPU使用率的好方法福扬。你可以查看README文件,然后試一試這個功能惜犀。
Modules
Redis6的模塊API完全是一個新的等級了铛碑。這是Redis發(fā)展最快的部分之一,因為我們從最開始就使用模塊系統(tǒng)來開發(fā)非常復(fù)雜的東西虽界,而不僅僅是瑣碎的示例汽烦。前端時間,我啟動了Disque端口莉御,這也促使我為模塊系統(tǒng)帶來新功能∑餐蹋現(xiàn)在,你可以把Redis看成一個框架礁叔,可以講系統(tǒng)作為模塊進(jìn)行編寫牍颈,避免從頭造輪子,同時也可以獲得BSD許可琅关,Redis實際上是一個可以用來編寫系統(tǒng)的開放平臺煮岁。
內(nèi)部
Redis內(nèi)部有非常多的優(yōu)化:復(fù)制命令的方式發(fā)生了很大變化,過期使用了另一種算法涣易,該算法更快且緩存更明顯人乓。
Status和ETA
現(xiàn)在我們已經(jīng)有了RC1,我希望在3月末都毒,最晚5月色罚,你就可以看到GA版本準(zhǔn)備就緒。
現(xiàn)在账劲,Redis6絕對是可測試的戳护,并且遇到錯誤的機會很小金抡。但它包含了大量的代碼更改,并且新功能由新的代碼組成腌且,也從沒有人在生產(chǎn)環(huán)境中運行過這些代碼梗肝。所以如果你找到了bug,請以最好的方式描述一下發(fā)生的情況并報告給我們铺董。
感謝所有人為該版本做出貢獻(xiàn)的人和在接下來幾個月中幫助我們維護(hù)它處于穩(wěn)定狀態(tài)的人巫击。
啊,我差點忘了精续,這是第6版的LOLWUT命令交互圖:
每次運行都會隨機生成不同的景觀坝锰。
博客原文地址
譯者注
正如作者所說,Redis6帶來了很多新的功能重付。剛發(fā)布的版本肯定不能拿到線上去玩顷级,但是自己折騰一下,提前感受一下也不錯确垫。特別是RESP3和客戶端緩存都是我比較期待的弓颈。另外還有新的過期算法,這個之前沒怎么聽說删掀,也值得研究一下翔冀。不說了,我先下為敬披泪。