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

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

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

前言

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

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

所以是不是感覺自己還是有一種被束縛的感覺,有這個感覺就對了。。。

一:Lua腳本

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

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

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

上VPN哦。。。淘寶上不知道有沒有售賣這種同款的吸頂燈~~~

二:使用Redis-Cli Lua Script 解決幾個靈活性問題

1. Lua語法的問題

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

比如這里我下載了一個windows版本的lua 編譯器,具體語法上就不細(xì)說了。。有了這個主題,我們再進(jìn)行下一個環(huán)節(jié)。

2. Eval的使用

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

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

<1> script: 你的lua腳本

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

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

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

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

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

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

age的占位符,ARGV[1]就是jack的占位符,ARGV[2]就是20的占位符,,以此類推,,,所以最后的結(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中直接寫lua腳本,這樣非常不方便編輯,通常情況下我們都是把lua script放到一個lua文件中,然后執(zhí)行這個lua腳本,比如

下面這樣:

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

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

[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)思幾個小案例通過lua解決。

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

local key=KEYS[1]

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

return list;

這里面的redis.call就是用來執(zhí)行redis中l(wèi)ist的lrange命令,接下來我通過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> 

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

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

2.根據(jù)外面?zhèn)鬟^來的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;

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

總結(jié)

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

相關(guān)文章

  • redis啟動流程介紹

    redis啟動流程介紹

    這篇文章主要介紹了redis啟動流程介紹,本文更分5步,分別是準(zhǔn)備運(yùn)行環(huán)境、解析命令行參數(shù)、initServer()初始化服務(wù)、loadDataFromDisk()從rdb或aof文件加載數(shù)據(jù)、aeMain()開始事件循環(huán),接收客戶端請求,需要的朋友可以參考下
    2015-01-01
  • 詳解Redis使用認(rèn)證密碼登錄

    詳解Redis使用認(rèn)證密碼登錄

    本篇文章主要介紹了詳解Redis使用認(rèn)證密碼登錄 。啟用Redis的認(rèn)證密碼可以增加Redis服務(wù)器的安全性。有興趣的可以了解下
    2017-06-06
  • Redis高可用集群redis-cluster詳解

    Redis高可用集群redis-cluster詳解

    redis?cluster?是redis官方提供的分布式解決方案,在3.0版本后推出的,有效地解決了redis分布式的需求,當(dāng)一個redis節(jié)點(diǎn)掛了可以快速的切換到另一個節(jié)點(diǎn),對redis-cluster高可用集群相關(guān)知識感興趣的朋友一起看看吧
    2022-03-03
  • 淺談Redis變慢的原因及排查方法

    淺談Redis變慢的原因及排查方法

    本文主要介紹了淺談Redis變慢的原因及排查方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Redis?key-value亂碼的解決

    Redis?key-value亂碼的解決

    本文主要介紹了Redis?key-value亂碼的解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Redis?如何清空所有數(shù)據(jù)

    Redis?如何清空所有數(shù)據(jù)

    這篇文章主要介紹了Redis?如何清空所有數(shù)據(jù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Redis分布式鎖之紅鎖的實(shí)現(xiàn)

    Redis分布式鎖之紅鎖的實(shí)現(xiàn)

    在Redis中,紅鎖是一種分布式鎖的實(shí)現(xiàn)機(jī)制,旨在解決多個客戶端在分布式環(huán)境中對共享資源進(jìn)行并發(fā)訪問的問題,本文主要介紹了Redis分布式鎖之紅鎖的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 使用Redis緩存時(shí)高效的批量刪除的幾種方案

    使用Redis緩存時(shí)高效的批量刪除的幾種方案

    這篇文章主要介紹了使用Redis緩存時(shí)高效的批量刪除的幾種方案的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 基于 Redis 的 JWT令牌失效處理方案(實(shí)現(xiàn)步驟)

    基于 Redis 的 JWT令牌失效處理方案(實(shí)現(xiàn)步驟)

    當(dāng)用戶登錄狀態(tài)到登出狀態(tài)時(shí),對應(yīng)的JWT的令牌需要設(shè)置為失效狀態(tài),這時(shí)可以使用基于Redis 的黑名單方案來實(shí)現(xiàn)JWT令牌失效,本文給大家分享基于 Redis 的 JWT令牌失效處理方案,感興趣的朋友一起看看吧
    2024-03-03
  • 使用redis實(shí)現(xiàn)附近的人功能

    使用redis實(shí)現(xiàn)附近的人功能

    這篇文章主要介紹了使用redis實(shí)現(xiàn)附近的人,實(shí)現(xiàn)諸如附近的人這類依賴于地理位置信息的功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09

最新評論