脚本lua_Redis + LUA 脚本实现分布式限流

人生没有白走的路,每一步都算数。

使用 Redis + lua 脚本实现分布式限流, lua 可以保证操作多个 key 执行的原子性,

注意:请求量很大的话,建议使用 Nginx  + Open Resty 实现。 

01

lua 脚本

keys = 时间戳 秒级别的。

String redisKey = "limit_" + new Date().getTime() / 1000 

argv = limit 限流的次数,比如 key 一秒 limit 10  一秒钟 10 次 请求,超过就会被限制。

//lua 脚本local key = KEYS[1]local limit = ARGV[1]local current = tonumber(redis.call('get', key) or "0" )if current + 1 > limit then return 0    elseredis.call("INCR", key, "1")redis.call("expire", key, "3")return current+1end

02

注意点

  • redis  scriptLoad () 将脚本加载到 redis 缓存中 并且永久保存,然后返回一个 sha1 。

  • evalsha (sha1 keys argv) 执行脚本。

  • flush 删除脚本 

注意:一般执行采用这样执行,将 lua 脚本加载到redis ,但是之后就不需要记载了。直接丢参数上去执行就好了。lua 脚本一定要注意 string 和 number 的区别

我 一 直 不 知 道

喜 为 何 物

欢 有 何 由

你 的 出 现 给 了 我 答 案

来点开心的

武汉大学三行情书大赛冠军作品

99b1c5efdb34a52dd82fb9bcba85d5f4.png

螃蟹在剥我的壳

笔记本在写我

漫天的我落在枫叶上雪花上

而你在想我

螃蟹不可能在剥我的壳

笔记本不可能在写我

我不可能落在枫叶上雪花上

而你不可能在想我

是我在剥螃蟹壳

是我在写笔记本

是枫叶和雪花落在我的身上

是我在想你

除非世界颠倒你才会爱上我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值