上個(gè)月,Redis舉辦了3場(chǎng)線上會(huì)議袖迎,分別介紹了即將正式發(fā)布的Redis 7中包括的重要更新的內(nèi)容鸽心,還有Redis完全重寫(xiě)的RedisJSON 2.0模塊聊闯,和新發(fā)布的Redis Stack模塊布疼。除此之外摊趾,在此次線上會(huì)議中還介紹了現(xiàn)代化的軟件架構(gòu)與Redis是如何緊密結(jié)合在一起,例如Redis與Machine Learning或者人工智能的結(jié)合游两。下面讓我們來(lái)具體看一下在會(huì)議中提到的具體內(nèi)容吧砾层。下面我們來(lái)看一個(gè)具體的例子:
****首先,讓我們來(lái)看一下Redis 7提供的新特性** **
1贱案、Redis Functions: 在Redis 7.0中作為L(zhǎng)ua腳本的升級(jí)內(nèi)容
在2012年發(fā)布的Redis2.6中肛炮,Redis引入了Lua腳本這個(gè)概念。Lua腳本概念的引入使得Redis中的數(shù)據(jù)與客戶的應(yīng)用程序結(jié)合的更加緊密宝踪,但是不可否則侨糟,Lua腳本依然有它的局限性:Lua腳本是存在于客戶端應(yīng)用程序中的,一旦客戶端應(yīng)用重新啟動(dòng)瘩燥,那么Lua腳本需要重新加載秕重,這樣就增加了對(duì)客戶端應(yīng)用程序的代碼量與程序員維護(hù)程序的成本。為了解決這些問(wèn)題颤芬,Redis 7.0加入了Redis Functions這個(gè)概念悲幅,Redis Functions可支持持久化套鹅,可復(fù)制站蝠,并且在節(jié)點(diǎn)重啟之后可以直接從server端讀取,并且還提供未來(lái)多種語(yǔ)言的API支持(目前只支持Lua)卓鹿。下面我們來(lái)看一個(gè)具體的例子:
圖一:是一個(gè)名字為myscript.lua 的Lua腳本文件
我們可以看到當(dāng)腳本成功執(zhí)行菱魔,server端的log顯示:Execution started 和Execution ended。
圖二:是這個(gè)腳本文件在客戶端運(yùn)行的情況
當(dāng)server被重啟后吟孙,這個(gè)Lua腳本如果不重新加載澜倦,那么它不會(huì)被執(zhí)行,會(huì)顯示錯(cuò)誤信息杰妓。
圖三:顯示信息
那么下面我們來(lái)看一下如果是Redis Functions藻治,運(yùn)行的情況是什么樣的。首先讓我們來(lái)看一下Lua腳本和Redis Functions腳本的共同點(diǎn)和區(qū)別巷挥。下圖是一個(gè)名為mylib.lua的Redis Functions腳本與之前的Lua腳本的一個(gè)對(duì)比桩卵。我們可以看到,唯一的不同是在Redis Functions中執(zhí)行了一條語(yǔ)句:
redis.register_function(“hgetset”, hgetset);
圖四:前后對(duì)比
我們看到客戶端首先運(yùn)行: redis-cli –x FUNCTION LOAD Lua mylib 將這個(gè)mylib加載進(jìn)Redis 服務(wù)器端,然后調(diào)用redis-cli FCALL hgetset 1 myhash myfield “some other value” 去調(diào)用這個(gè)函數(shù)雏节,最后我們可以看到成功的被執(zhí)行了胜嗓。
在server被重新啟動(dòng)之后,如果我們直接執(zhí)行redis-ci FCALL …. 去調(diào)用這個(gè)函數(shù)钩乍,mylib中的函數(shù)依然可以執(zhí)行成功辞州,而不需要像Lua腳本那樣重新加載。
2寥粹、ACL Selectors: 對(duì)于Redis 6.0 ACL功能的擴(kuò)展(V1)变过,可以支持更豐富和更方便的權(quán)限設(shè)置
在Redis 7 之前的ACL功能具有很多限制:例如一個(gè)用戶不能對(duì)不同的鍵設(shè)置不同的權(quán)限(permissions);或者用戶也不能對(duì)不同的鍵賦予不同的讀寫(xiě)權(quán)限。在Redis 7中的ACL V2中涝涤,這些方面得到了進(jìn)一步的改善:新增加了一個(gè)selector的概念牵啦,這個(gè)概念是將一系列的權(quán)限規(guī)則放在一起作為一個(gè)整體來(lái)執(zhí)行(Selectors are a collection of authorization rules that are evaluated as a group), 并且用戶可以執(zhí)行命名以root權(quán)限執(zhí)行或者作為某一個(gè)selector來(lái)執(zhí)行(A user can execute a command if either the root permission or any selector authorizes the commands)。另外妄痪,在ACL V2中哈雏,Redis 新增了用戶對(duì)鍵(key based)的權(quán)限控制能力,下面我們來(lái)看一個(gè)具體的例子:
基于Selector的例子衫生,我們可以看到基于MADELYN用戶裳瘪,它對(duì)于itamar_q 是有LPOP操作權(quán)限而沒(méi)有LPUSH操作權(quán)限的,但是對(duì)于madelyn_q是有LPUSH操作權(quán)限的罪针。
基于key based 權(quán)限的例子
3彭羹、在集群方面
增加了對(duì)分片的Pub/Sub支持,并且還增加了對(duì)主機(jī)名的支持泪酱。
4派殷、在底層數(shù)據(jù)結(jié)構(gòu)中
使用listpacks替換了ziplists,并且使用了RDB 10的格式墓阀。
5毡惜、對(duì)于AOF文件,使用了多AOF機(jī)制
使得在重寫(xiě)過(guò)程中使用更少的內(nèi)存和占用更低的I/O;第二個(gè)特點(diǎn)是在AOF中增加了每個(gè)鍵值對(duì)所對(duì)應(yīng)的時(shí)間戳斯撮,為之后的Redis版本提供回滾和恢復(fù)提供了很好的支持经伙。
RedisJSON 2.0
RedisJSON 2.0是由RUST完全重寫(xiě)的,它比上一個(gè)版本提供了更強(qiáng)的性能勿锅,更好的穩(wěn)定性和更低的內(nèi)存占用率帕膜。同時(shí),RedisJSON2.0 對(duì)文檔中的特定內(nèi)容提供了JSONPath的語(yǔ)法支持溢十。新的版本具有以下新特點(diǎn):1.支持文檔中子元素(sub-element)的更新垮刹。這種能力基于使用了JSON 數(shù)據(jù)交換格式(ECMA 404)作為元數(shù)據(jù)類型對(duì)子元素執(zhí)行原子化的更新操作,其結(jié)果是大大提高的開(kāi)發(fā)者的效率并且加快了應(yīng)用程序的相應(yīng)速度2.RediSearch可以支持索引(index),可以在JSON文檔中進(jìn)行全文查找3.新版本不但對(duì)大多數(shù)流行的主流語(yǔ)言(JavaScript, Python, Java C#)和平臺(tái)(Spring, ASP.NET, Node.js, DJango)提供支持张弛,而且還對(duì)RedisInsight提供良好的GUI和入門(mén)指導(dǎo)下面提供一個(gè)具體的例子來(lái)說(shuō)明一下以上提到的特點(diǎn):
更新user = 1 的score部分從5到100
更新user = 1 的內(nèi)嵌的profile的屬性name為Sue
為user=1的屬性friends數(shù)組增加user:3
如果想了解更多關(guān)于RedisJSON2.0的內(nèi)容荒典,可以查看鏈接:
https://redis.com/press/redisjson-2-0-serves-as-fast-flexible-document-database/
Redis Stack
在此次RedisDay中宗挥,Redis官方幾乎花了2個(gè)小時(shí)全方面的介紹了Redis Stack,并列舉了幾個(gè)具體的例子來(lái)說(shuō)明Redis Stack是如何與應(yīng)用程序結(jié)合的种蝶。
事實(shí)上契耿,Redis Stack一個(gè)Redis對(duì)于數(shù)據(jù)模型和處理引擎的擴(kuò)展模塊。它支持可查詢的JSON文檔螃征,基于時(shí)間序列的數(shù)據(jù)的操作等功能搪桂。并且,Redis Stack還包括了RedisInsight盯滚,一個(gè)Redis的可視化工具踢械。
如果想了解更多的關(guān)于Redis Stack的內(nèi)容,可以查看鏈接(https://redis.io/docs/stack/)及我們后續(xù)關(guān)于Redis Stack專題的博客魄藕。
除了以上內(nèi)容内列,在這3天的RedisDay中還介紹了一些Redis與人工智能,機(jī)器學(xué)習(xí)相關(guān)的應(yīng)用與API背率,有感興趣的各位讀者可以登錄Redis網(wǎng)站去觀看相關(guān)視頻:
https://redis.com/redisdays/话瞧,謝謝您繼續(xù)關(guān)注我們關(guān)于Redis的相關(guān)文章。
*注:本文所有圖片和例子都取自于RedisDays中的視頻寝姿,感謝Redis 開(kāi)源社區(qū)所有貢獻(xiàn)者對(duì)Redis所作的貢獻(xiàn)交排。