Redis 脚本应用

本贴最后更新于 2292 天前,其中的信息可能已经物是人非

一段 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 来关闭

Jedis 调用 Lua 脚本

  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 181 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...