Redis并发访问简单Ip控件

时间:2018-01-16 17:47:19

标签: lua redis

我需要定义一个记录/验证任何IP访问次数的地方。如果任何Ip的数量大于每分钟十次,则Ip请求将被拒绝。

创建此脚本是为了验证此情况。如果ip不存在,Lua脚本将使用60秒TTLL为此ip创建新计数器。如果它存在,它将增加它,并且如果该ip的计数器大于10,则验证它。

KEYS [1] == 163.2.2.2

 if redis.call("EXISTS",KEYS[1]) == 1 then
  local ocurrences=redis.call("INCR",KEYS[1])
  if ocurrences>10 then
    return true
  else
    return false
 end
else
  redis.call("SETEX",KEYS[1],60,1)
  return false
end

它工作正常,但是Lua上的Lua脚本或事务阻止了Redis能够验证它的乐观主义锁定。使用redis进行redis的最佳方法是在没有阻止Redis的情况下使用读/写访问没有竞争问题?

1 个答案:

答案 0 :(得分:1)

在Redis中,(几乎)所有命令都会阻塞服务器,包括Lua脚本评估。也就是说,请记住,您的服务器仍然可以满足大量请求,同时确保它们的隔离。

Lua脚本不需要乐观,只要它们足够简单 - 就像你的一样 - 是一个不错的选择。 IMO此脚本将按预期进行基本速率限制。