根据传入参数的方式不同,可实现不同批量设置key的lua脚本
以下script为脚本数据,用于生成【sha】
redis.ScriptLoad(ctx, Script).Result()
以下执行脚本,获取返回值
redis.EvalSha(ctx, Sha, keys, args...).Result()
以下两种lua脚本:
KEYS: ["my:key:::1","my:key:::2","my:key:::3"]
ARGV:["value1","value2","value3","expire1","expire2","expire3"]
func MSetWithTtl() string {
script := `
if #KEYS < 1 or #ARGV < 1 then
return -1
end
local keyNum = #KEYS
local argNum = #ARGV
local resVal = 0
local expVal = 0
if 2 * keyNum ~= argNum then
return -1
end
for id, key in pairs(KEYS) do
expVal = ARGV[id + keyNum]
if expVal == 0 then
resVal = redis.call('set', key, ARGV[id])
else
resVal = redis.call('set', key, ARGV[id], 'EX', expVal)
end
if resVal == false then
return -1
end
end
return 1
`
return script
}
KEYS:批量设置多个key的数量,比如3个key
ARGV:["my:key:::1","value1","expire1","my:key:::2","value2","expire2","my:key:::3","value3","expire3"]
func MSetWithTtl() string {
script := `
local count = tonumber(KEYS[1])
for i=1,count do
local expireTime = tonumber(ARGV[3*(i-1)+3])
if expireTime == -1 then
redis.call('set',ARGV[3*(i-1)+1],ARGV[3*(i-1)+2])
else
redis.call('set',ARGV[3*(i-1)+1],ARGV[3*(i-1)+2],'ex',expireTime)
end
end
return 1
`
return script
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。