redis lua实现频次限制,超频后的次数不加
时间: 2023-08-12 08:14:50 浏览: 43
可以使用以下的 Redis Lua 脚本实现频次限制:
```
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local current = tonumber(redis.call('get', key) or "0")
if current < limit then
redis.call('incr', key)
end
return math.min(current, limit)
```
和之前的脚本相比,这个脚本多了一行代码 `return math.min(current, limit)`,这是为了确保即使超过频次限制,当前键的值也不会超过限制值,而是返回限制值。
当你调用这个脚本时,它会先尝试从 Redis 中获取当前键对应的值,然后将这个值解析为一个数字。如果这个数字小于限制值,那么它会将键的值加 1,否则它不会对键的值进行任何修改。
最后,这个脚本会返回当前键的值和限制值中较小的那个值,确保即使超过频次限制,当前键的值也不会超过限制值。