一段 Lua 脚本,用来实现访问频率限制
local times= redis.call('incr',KEYS[1])
if times==1
then redis.call('expire',KEYS[1],ARGV[1])
end
if times>tonumber(ARGV[2]) then
return 0
end
return 1
如何调用这个脚本呢?
redis-cli --eval /Users/root/ratelimit.lua ip , 10 3
第一个参数--eval 代表运行后面的 lua 脚本
后面跟着的是脚本中参数" ,"前后要有空格" ,"前代表 KEYS[.] 后代表 ARGV[.]
脚本中调用 Redis 命令
如 redis.call('set','foo','bar')
程序中执行脚本
eval ”脚本内容” i value value...
i 代表前几个存入 KEYS[]中 后面的存入 ARGV[]中 不需要时设为 0
如 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 tt bb
脚本内容过多可使用 evalsha 后跟 摘要信息 (许多客户端会默认先进行 evalsha 请求 失败在执行 sha)
Redis 执行脚本有如下特点
取消随机性
沙盒
原子性
脚本相关命令
script load “脚本内容” 返回 sha1 摘要 顾名思义将脚本加入缓存以便客户端可以使用 evalsha
script exists “脚本 sha1 摘要” “脚本 sha1 摘要” 可查找一个或多个脚本是否加入了缓存
script flush 清空脚本缓存
script kill 终止当前执行的脚本 如果脚本中对数据进行了修改 则只能使用 shutdown 来关闭
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于