【redis】常用Lua脚本

【1】zadd+ expire + ZREMRANGEBYRANK,保留最近maxSize条数据(按rank倒排)

redis.call('ZADD', KEYS[1], unpack(ARGV, 3)); 
redis.call('EXPIRE', KEYS[1], ARGV[1]); 
local maxSize = tonumber(ARGV[2]); 
redis.call('ZREMRANGEBYRANK', KEYS[1], 0, -maxSize-1); 
return 1

注:ZREMRANGEBYRANK key start end命令说明:
0,代码score最小的元素位置;-代表score最大的元素位置;
正数:score从小往大数
负数:score从大往小数

【2】DEL + zadd + expire

redis.call('DEL',KEYS[1]);
if #ARGV>=2 then redis.call('ZADD',KEYS[1],unpack(ARGV,2)) end;
redis.call('EXPIRE',KEYS[1],ARGV[1]); 
return 1

【3】次数频控

local key = KEYS[1] 
local leftNum = ARGV[1] 
if redis.call('setnx', key, leftNum) == 1 then 
    redis.call('expire', key, ARGV[2]) 
else 
    leftNum = redis.call('get', key) 
end 
if tonumber(leftNum) > 0 then 
    redis.call('decr', key)  
    return 1 
else 
    return 0 
end

注:
script load "lua脚本" ==》 返回hash值
evalsha <hash值> <key的个数> <keys...> <values...>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容