美文网首页
Redis lua脚本无法设置key过期

Redis lua脚本无法设置key过期

作者: 牛亦非 | 来源:发表于2019-11-28 11:23 被阅读0次

近期碰到的一个产品需求:限制用户对某个接口的访问频次,一段时间内超过限制次数则拒绝访问。比如A用户如果在1天内访问接口已达到5次,第6次访问时就会返回错误提示。
这种问题的处理很适合用redis带过期时间的string来记录用户访问次数,同时用lua脚本来保证并发场景下的数据一致性。
一开始很快撸了一个脚本test.lua:

local key,ttl=KEYS[1],KEYS[2]
// key不存在则设置过期时间和初始访问次数
if redis.call('GET',key)==nil then
  redis.call('SETEX',key,ttl,1)
  return 1
else
  return tonumber(redis.call('INCR',key))
end

看起来无懈可击,用命令行测试一下:

redis-cli --eval test.lua test_key 1000
redis-cli
> ttl test_key
(integer) -1

运行成功,但是执行ttl发现key并没有过期时间。哪里有问题呢?google了一下也没查到有用的信息。灵机一动,把判断key是否存在做了下改动:

if redis.call('EXISTS',key)==0 then

卧槽,这样就可以了!目前还没查到原因,感觉是个小坑。

相关文章

网友评论

      本文标题:Redis lua脚本无法设置key过期

      本文链接:https://www.haomeiwen.com/subject/hnwvwctx.html