Redis如何使用lua指令碼例項教程

2022-09-26 00:09:13 字數 2496 閱讀 9540

前言

在redis的官網上洋洋灑灑的大概提供了200多個命令,貌似看起來很多,但是這些都是別人預先給你定義好的,但你卻不能按照自己的意圖進行定製,

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

說來也巧,redis的大老闆給了你解決這種問題的方法,那就是lua指令碼,而且redis的最新版本也支援lua script debug,這應該也是未來redis的一

個發展趨勢,要想學好redis,必會lua script。。。

下面話不多說了,來一起看看詳細的介紹吧

版本:自2.6.0起可用。

時間複雜度:取決於執行的指令碼。

使用lua指令碼的好處:

如何使用

基本使用

命令格式:

eval script numkeys key [key ...] arg [arg ...]

說明:簡單例項:

127.0.0.1:6379> eval "return ar**[1]" 0 100

"100"

127.0.0.1:6379> eval "return " 0 100 101

1) "100"

2) "101"

127.0.0.1:6379> eval "return " 2 key1 key2 first second

1) "key1"

2) "key2"

3) "first"

4) "second"

127.0.0.1:6379> eval "redis.call('set', keys[1], ar**[1]);redis.call('expire', keys[1], ar**[2]); return 1;" 1 test 10 60

(integer) 1

127.0.0.1:6379> ttl test

(integer) 59

127.0.0.1:6379> get test

"10"

注:

命令列裡使用

如果直接使用redis-cli命令,格式會有點不一樣:

redis-cli --eval lua_file key1 key2 , arg1 arg2 arg3

注意的地方:

示例:incrbymul.lua

local num = redis.call('get', keys[1]);

if not num then

return 0;

www.cppcns.comelse

local res = num * ar**[1];

redis.call('set',keys[1], res);

return res;

end命令列執行:

$ redis-cli --eval incrbymul.lua lua:incrbymul , 8

(integer) 0

$ redis-cli incr lua:incrbymul

(integer) 1

$ redwww.cppcns.comis-cli --eval incrbymul.lua lua:incrbymul , 8

(integer) 8

$ redis-cli --eval incrbymul.lua lua:incrbymul , 8

(integer) 64

$ redis-cli --eval incrbymul.lua lua:incrbymul , 2

(integer) 128

由於redis沒有提供命令可以實現將乙個數原子性的乘以n倍,這裡我們就用lua指令碼實現了,執行過程中確保不會被其它客戶端打斷。

phpredis裡使用

接著上面的例子:

incrbymul.php

<?php $lua = <$ret = $redis->eval($lua, array("lua:incrbymul", 2), 1);

echo $ret;

執行:$ redis-cli set lua:incrbymul 0

ok$ redis-cli incr lua:incrbymul

(integer) 1

$ php incrbymul.php

2$ php incrbymul.php

4eval原型:

redis::eval(string script, [array keys, long num_keys])

eval函式的第3個引數為keys個數,phpredis依據此值將keys和ar**做區分。

參考1、在redis中使用lua指令碼讓你的靈活性提高5個逼格 - 一線碼農

2、redis執行lua指令碼示例 - yanghuahui

3、eval - redis

4、phpredis 執行lua指令碼的例子 - jingtan的專欄

5、lua-book

總結本文標題: redis如何使用lua指令碼例項教程

本文位址: /shujuku/redis/241722.html

Redis使用lua指令碼

版本 自2.6.0起可用。時間複雜度 取決於執行的指令碼。使用lua指令碼的好處 命令格式 eval script numkeys key key arg arg 說明 簡單例項 127.0.0.1 6379 eval return ar 1 0 100 100 127.0.0.1 6379 eva...

Redis使用lua指令碼

版本 自2.6.0起可用。時間複雜度 取決於執行的指令碼。使用lua指令碼的好處 命令格式 copy eval script numkeys key key arg arg 說明 簡單例項 copy 127.0.0.1 6379 eval return ar 1 0 100 100 127.0.0....

Redis中使用lua指令碼

公司中的爬蟲專案作為乙個接盤來的專案,專案中大致流程是,把要抓取的資料匯入到redis中,然後不斷pop再去抓取。為了避免redis中的資料丟失,大哥採取的是先pop再將拿到的資料通過set的形式在redis中記錄下來。redis client redis.redis 127.0.0.1 decod...