Redis使用lua指令碼

2021-10-05 14:51:52 字數 2094 閱讀 9824

版本:自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.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命令,格式會有點不一樣:

copy

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

注意的地方:

示例:incrbymul.lua

copy

local num = redis.call('get', keys[1]); if not num then return 0; else local res = num * ar**[1]; redis.call('set',keys[1], res); return res; end

命令列執行:

copy

$ redis-cli --eval incrbymul.lua lua:incrbymul , 8 (integer) 0 $ redis-cli incr lua:incrbymul (integer) 1 $ redis-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指令碼實現了,執行過程中確保不會被其它客戶端打斷。

接著上面的例子:

incrbymul.php

copy

<?php $lua =

執行:

copy

$ redis-cli set lua:incrbymul 0 ok $ redis-cli incr lua:incrbymul (integer) 1 $ php incrbymul.php 2 $ php incrbymul.php 4

eval原型:

copy

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的專欄 - csdn部落格

5、lua-book

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指令碼

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

Lua基本語法 Redis使用Lua指令碼

lua 學習目標是 能寫一些 lua指令碼。redis 使用lua 5.1 版本。lua是動態型別語言。1.資料型別 空 nil 沒有賦值的變數或表的字段 都是nil 布林 boolean 包含 true 和 false 字串 string 如 a 或 a 表 table 既可以是 陣列 又可以是 ...