欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis執(zhí)行Lua腳本的好處與示例代碼

 更新時(shí)間:2018年10月15日 09:50:47   作者:yanghuahui  
Redis在2.6推出了腳本功能,允許開發(fā)者使用Lua語言編寫腳本傳到Redis中執(zhí)行。下面這篇文章主要給大家介紹了關(guān)于Redis執(zhí)行Lua腳本的好處與示例代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

Redis從2.6版本開始引入對(duì)Lua腳本的支持,通過在服務(wù)器中嵌入Lua環(huán)境,Redis客戶端可以使用Lua腳本,直接在服務(wù)端原子的執(zhí)行多個(gè)Redis命令。

其中,使用EVAL命令可以直接對(duì)輸入的腳本進(jìn)行求值:

redis>EVAL "return 'hello world'" 0
"hello world"

使用腳本的好處如下:

1.減少網(wǎng)絡(luò)開銷:本來5次網(wǎng)絡(luò)請(qǐng)求的操作,可以用一個(gè)請(qǐng)求完成,原先5次請(qǐng)求的邏輯放在redis服務(wù)器上完成。使用腳本,減少了網(wǎng)絡(luò)往返時(shí)延。

2.原子操作:Redis會(huì)將整個(gè)腳本作為一個(gè)整體執(zhí)行,中間不會(huì)被其他命令插入。

3.復(fù)用:客戶端發(fā)送的腳本會(huì)永久存儲(chǔ)在Redis中,意味著其他客戶端可以復(fù)用這一腳本而不需要使用代碼完成同樣的邏輯。

Redis執(zhí)行Lua腳本

實(shí)現(xiàn)一個(gè)訪問頻率控制,某個(gè)ip在短時(shí)間內(nèi)頻繁訪問頁面,需要記錄并檢測(cè)出來,就可以通過Lua腳本高效的實(shí)現(xiàn)
在redis客戶端機(jī)器上,新建一個(gè)文件ratelimiting.lua,內(nèi)容如下

local times = redis.call('incr',KEYS[1])

if times == 1 then
 redis.call('expire',KEYS[1], ARGV[1])
end

if times > tonumber(ARGV[2]) then
 return 0
end
return 1

在redis客戶端機(jī)器上,如何測(cè)試這個(gè)腳本呢?如下:

redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3

--eval參數(shù)是告訴redis-cli讀取并運(yùn)行后面的Lua腳本,ratelimiting.lua是腳本的位置,后面跟著是傳給Lua腳本的參數(shù)。其中","前的rate.limiting:127.0.0.1是要操作的鍵,可以再腳本中用KEYS[1]獲取,","后面的10和3是參數(shù),在腳本中能夠使用ARGV[1]和ARGV[2]獲得。注:","兩邊的空格不能省略,否則會(huì)出錯(cuò)

結(jié)合腳本的內(nèi)容可知這行命令的作用是將訪問頻率限制為每10秒最多3次,所以在終端中不斷的運(yùn)行此命令會(huì)發(fā)現(xiàn)當(dāng)訪問頻率在10秒內(nèi)小于或等于3次時(shí)返回1,否則返回0。

測(cè)試運(yùn)行如下:

[root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3
(integer) 1
[root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3
(integer) 1
[root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3
(integer) 1
[root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3
(integer) 0
[root@rhel6 redis-learning]# redis-cli --eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3
(integer) 0

補(bǔ)充:

現(xiàn)在Lua腳本用在很多游戲上,主要是Lua腳本做到可以嵌入到其他程序中運(yùn)行,游戲升級(jí)的時(shí)候,可以直接升級(jí)腳本,而不用重新安裝游戲。比如游戲的很多關(guān)卡,只需要增加lua腳本,在游戲中嵌入Lua解釋器,游戲團(tuán)隊(duì)線上更新Lua腳本,然后游戲自動(dòng)下載最新的游戲關(guān)卡。例如之前很多的游戲《憤怒的小鳥》就是用Lua語言實(shí)現(xiàn)的關(guān)卡。

摘自《Redis入門指南》

總結(jié)

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

相關(guān)文章

  • Redis設(shè)置永久密碼方式

    Redis設(shè)置永久密碼方式

    找到Redis安裝目錄下的redis.windows.conf文件,搜索并設(shè)置requirepass參數(shù)為自定義密碼,保存修改后重啟服務(wù),以增強(qiáng)安全性,此為個(gè)人經(jīng)驗(yàn),供參考
    2025-07-07
  • Redis高效率原因及數(shù)據(jù)結(jié)構(gòu)分析

    Redis高效率原因及數(shù)據(jù)結(jié)構(gòu)分析

    這篇文章主要為大家詳細(xì)的介紹了Redis高效的原因以及分析了Redis高效的數(shù)據(jù)結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • redis.clients.jedis.exceptions.JedisBusyException無法處理異常的解決方法

    redis.clients.jedis.exceptions.JedisBusyException無法處理異常的解決方法

    redis.clients.jedis.exceptions.JedisBusyException異常通常不是 Jedis客戶端直接拋出的標(biāo)準(zhǔn)異常,本文就來介紹一下異常的解決方法,感興趣的可以了解一下
    2024-05-05
  • redis刪除指定key的實(shí)現(xiàn)步驟

    redis刪除指定key的實(shí)現(xiàn)步驟

    本文主要介紹了redis刪除指定key的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 華為歐拉openEuler編譯安裝Redis的實(shí)現(xiàn)步驟

    華為歐拉openEuler編譯安裝Redis的實(shí)現(xiàn)步驟

    本文主要介紹了華為歐拉openEuler編譯安裝Redis的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • RedisAPI原子性操作及原理解析

    RedisAPI原子性操作及原理解析

    這篇文章主要介紹了RedisAPI原子性操作及原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • RedisTemplate訪問Redis的更好方法

    RedisTemplate訪問Redis的更好方法

    這篇文章主要為大家介紹了RedisTemplate訪問Redis的更好方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • redis緩存穿透解決方法

    redis緩存穿透解決方法

    在本篇文章里小編給大家分享了關(guān)于redis緩存穿透的解決方法以及相關(guān)實(shí)例內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-06-06
  • redis單節(jié)點(diǎn)安裝與配置方式

    redis單節(jié)點(diǎn)安裝與配置方式

    這篇文章主要介紹了redis單節(jié)點(diǎn)安裝與配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Redis通用命令介紹以及key的層級(jí)結(jié)構(gòu)講解

    Redis通用命令介紹以及key的層級(jí)結(jié)構(gòu)講解

    這篇文章主要介紹了Redis通用命令以及key的層級(jí)結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12

最新評(píng)論