亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

redis中如何使用lua腳本讓你的靈活性提高5個(gè)逼格詳解

 更新時(shí)間:2018年10月15日 09:40:10   作者:一線(xiàn)碼農(nóng)  
這篇文章主要給大家介紹了關(guān)于redis中如何使用lua腳本讓你的靈活性提高5個(gè)逼格的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

在實(shí)際工作過(guò)程中,可以使用lua腳本來(lái)解決一些需要保證原子性的問(wèn)題,而且lua腳本可以緩存在redis服務(wù)器上,勢(shì)必會(huì)增加性能。

然而在redis的官網(wǎng)上洋洋灑灑的大概提供了200多個(gè)命令,貌似看起來(lái)很多,但是這些都是別人預(yù)先給你定義好的,但你卻不能按照自己的意圖進(jìn)行定制,

所以是不是感覺(jué)自己還是有一種被束縛的感覺(jué),有這個(gè)感覺(jué)就對(duì)了。。。

一:Lua腳本

說(shuō)來(lái)也巧,redis的大老板給了你解決這種問(wèn)題的方法,那就是Lua腳本,而且redis的最新版本也支持Lua Script debug,這應(yīng)該也是未來(lái)Redis的一

個(gè)發(fā)展趨勢(shì),要想學(xué)好Redis,必會(huì)Lua Script。。。

有趣的是,官網(wǎng)上還提供了一個(gè)視頻教程教你如何進(jìn)行Debug操作。。。 【https://redis.io/topics/ldb】 youtube上面的視頻,要是被墻了,記得

上VPN哦。。。淘寶上不知道有沒(méi)有售賣(mài)這種同款的吸頂燈~(yú)~~

二:使用Redis-Cli Lua Script 解決幾個(gè)靈活性問(wèn)題

1. Lua語(yǔ)法的問(wèn)題

lua是一門(mén)編程語(yǔ)言,所以這個(gè)就已經(jīng)超出了redis本身的范疇,如果大家想好好學(xué)習(xí)一下,可以看下http://www.lua.org/ 的官網(wǎng),然后下載一下玩一玩。

比如這里我下載了一個(gè)windows版本的lua 編譯器,具體語(yǔ)法上就不細(xì)說(shuō)了。。有了這個(gè)主題,我們?cè)龠M(jìn)行下一個(gè)環(huán)節(jié)。

2. Eval的使用

EVAL script numkeys key [key ...] arg [arg ...]

首先大家一定要知道eval的語(yǔ)法格式,其中:

<1> script: 你的lua腳本

<2> numkeys: key的個(gè)數(shù)

<3> key: redis中各種數(shù)據(jù)結(jié)構(gòu)的替代符號(hào)

<4> arg: 你的自定義參數(shù)

ok,可能乍一看模板不是特別清楚,下面我可以用官網(wǎng)的小案例演示一下:

eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 username age jack 20

上面這一串代碼大概是什么意思呢? 第一個(gè)參數(shù)的字符串就是script,也就是lua腳本。2表示keys的個(gè)數(shù),KEYS[1] 就是 username的占位符, KEYS[2]就是

age的占位符,ARGV[1]就是jack的占位符,ARGV[2]就是20的占位符,,以此類(lèi)推,,,所以最后的結(jié)果應(yīng)該就是:{return username age jack 20} 是不

是有點(diǎn)像C#中的占位符:{0}呢???下面我在Redis中給大家演示一下:

[root@localhost Desktop]# redis-cli
127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 username age jack 20
1) "username"
2) "age"
3) "jack"
4) "20"
127.0.0.1:6379>

通常境況下,我們不要在redis-cli中直接寫(xiě)lua腳本,這樣非常不方便編輯,通常情況下我們都是把lua script放到一個(gè)lua文件中,然后執(zhí)行這個(gè)lua腳本,比如

下面這樣:

然后我們通過(guò)下面命令執(zhí)行,這種方式和前面介紹的不一樣,參數(shù) --eval script key1 key2 , arg1 age2 這種模式,key和value用一個(gè)逗號(hào)隔開(kāi)就好了,

最后我們也看到了,數(shù)據(jù)都出來(lái)了,對(duì)吧。

[root@localhost Desktop]# redis-cli --eval /usr/redis/sbin/1.lua username age , jack 20
1) "username"
2) "age"
3) "jack"
4) "20"
[root@localhost Desktop]# 

三:實(shí)戰(zhàn)

下面我可以構(gòu)思幾個(gè)小案例通過(guò)lua解決。

1. 通過(guò)lua腳本獲取指定的key的List中的所有數(shù)據(jù)

local key=KEYS[1]

local list=redis.call("lrange",key,0,-1);

return list;

這里面的redis.call就是用來(lái)執(zhí)行redis中l(wèi)ist的lrange命令,接下來(lái)我通過(guò)lpush給person塞入三條數(shù)據(jù),如下:

[root@localhost Desktop]# redis-cli
127.0.0.1:6379> lpush person mary jack peter
(integer) 3
127.0.0.1:6379> 

然后我們來(lái)執(zhí)行這個(gè)lua腳本,效果如下圖,是不是很牛逼的感覺(jué)???

有了這個(gè)1+1的效果,就可以玩些更復(fù)雜的操作。比如:

2.根據(jù)外面?zhèn)鬟^(guò)來(lái)的IDList 做“集合去重”的lua腳本邏輯:

local key=KEYS[1];
local args=ARGV
local i=0;
local result={};
 for m,n in ipairs(args) do

 local ishit=redis.call("sismember",key,n);

 if(ishit) then
  table.insert(result,1,n);
 end

 end

return result;

2. 找到hash中age小于指定值的所有數(shù)據(jù),lua腳本如下:

local result={};
local myperson=KEYS[1];
local nums=ARGV[1];

local myresult =redis.call("hkeys",myperson);

for i,v in ipairs(myresult) do
 local hval= redis.call("hget",myperson,v);
 redis.log(redis.LOG_WARNING,hval);
 if(tonumber(hval)<tonumber(nums)) then
  table.insert(result,1,v);
 end
end

return result;

大家可以試著看下這段腳本,然后按照這個(gè)邏輯自己玩一玩,很有意思的,還是那句話(huà),學(xué)好redis,必會(huì)Lua。。。。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Windows下安裝Redis的流程詳解

    Windows下安裝Redis的流程詳解

    Redis作為常用開(kāi)源的非關(guān)系型數(shù)據(jù)庫(kù),是開(kāi)發(fā)中常用的數(shù)據(jù)庫(kù)之一,很多朋友不清楚Windows下安裝Redis的過(guò)程,今天小編通過(guò)分享本文給大家介紹詳細(xì)過(guò)程,一起看看吧
    2021-08-08
  • 分布式鎖三種實(shí)現(xiàn)方式及對(duì)比

    分布式鎖三種實(shí)現(xiàn)方式及對(duì)比

    這篇文章主要介紹了分布式鎖三種實(shí)現(xiàn)方式及對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Redis數(shù)據(jù)庫(kù)分布式設(shè)計(jì)方案介紹

    Redis數(shù)據(jù)庫(kù)分布式設(shè)計(jì)方案介紹

    大家好,本篇文章主要講的是Redis數(shù)據(jù)庫(kù)分布式設(shè)計(jì)方案介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-01-01
  • Redis Sentinel的基本搭建

    Redis Sentinel的基本搭建

    這篇文章主要介紹了Redis Sentinel的使用,幫助大家更好的理解和學(xué)習(xí)使用Redis數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-03-03
  • Redis swap空間(虛擬內(nèi)存)的使用詳解

    Redis swap空間(虛擬內(nèi)存)的使用詳解

    這篇文章主要介紹了Redis swap空間的使用示例,幫助大家更好的理解和學(xué)習(xí)使用Redis數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-03-03
  • Redis主從復(fù)制與讀寫(xiě)分離的實(shí)現(xiàn)

    Redis主從復(fù)制與讀寫(xiě)分離的實(shí)現(xiàn)

    Redis在作為緩存的時(shí)候,隨著項(xiàng)目訪(fǎng)問(wèn)量的增加,對(duì)Redis服務(wù)器的操作也越加頻繁,雖然Redis讀寫(xiě)速度都很快,但是一定程度上也會(huì)造成一定的延時(shí),本文主要介紹了Redis主從復(fù)制與讀寫(xiě)分離的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Rocky9部署redis的實(shí)現(xiàn)示例

    Rocky9部署redis的實(shí)現(xiàn)示例

    本文主要介紹了Rocky9部署redis的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • redis操作學(xué)習(xí)記錄

    redis操作學(xué)習(xí)記錄

    這篇文章主要介紹了redis操作,記錄總結(jié)了Redis客戶(hù)端、服務(wù)器、string、hash、list、發(fā)布/訂閱、事務(wù)等相關(guān)概念、原理與操作技巧,需要的朋友可以參考下
    2020-04-04
  • windows 64位下redis安裝教程

    windows 64位下redis安裝教程

    這篇文章主要為大家詳細(xì)介紹了windows 64位下redis安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • linux?redis-連接命令解讀

    linux?redis-連接命令解讀

    這篇文章主要介紹了linux?redis-連接命令解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論