Redis使用Lua指令碼自定義原子操作

2021-10-05 05:46:34 字數 943 閱讀 5892

1、eval:

eval 指令碼內容 key個數 key列表 引數列表

127.0.0.1:6379> eval 'return "hello " .. keys[1] .. " " .. ar**[1]' 1 redis why

"hello redis why"

2、evalsha:

先通過script load命令將lua指令碼載入到redis,得到該指令碼的sha1校驗和,服務端儲存hash值到lua指令碼的對映關係,evalsha命令使用sha1作為引數可以直接執行對應lua指令碼,指令碼常駐redis服務端,達到復用

redis.call("set", "why", "why")
vim why_lua.lua
redis.call("set", "why", "why")

redis.call("get", "why")

redis.call("del", "why")

redis.call("get", "why")

return "success!"

$redis-cli script load "$(cat why_lua.lua)"

"6bf3b28be7483331014e8b03f5014e5c0f89d1fc"

$redis-cli evalsha 6bf3b28be7483331014e8b03f5014e5c0f89d1fc 0

"success!"

$redis-cli

127.0.0.1:6379> evalsha 6bf3b28be7483331014e8b03f5014e5c0f89d1fc 0

"success!"

redis自定義lua指令碼

redis底層是用c語言寫的。執行的redis命令底層是呼叫的對應的lua指令碼。下面是跟著james老師通過做自定義lua指令碼,實現限流的功能。指令碼實現的功能是 在3秒內不超過2個連線。1 lua編譯器安裝 2 lua指令碼編寫 我是在redis安裝目錄 usr local soft redi...

lua自定義排序

說一下lua的table庫中比較常用的排序函式 table.sort 第乙個引數代表要進行排序的table,第二個引數是可選的,如果沒有第二個引數,那麼這個函式就會將table元素從小到大進行排序,我主要來說一下第二個引數。第二個引數是函式型別,這個函式接收兩個table元素,如果希望第乙個引數在排...

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...