Redis维护IP访问次数上限(redis限制ip次数)
日常开发中经常需要对访问资源的用户进行限制,比如分钟最大访问次数,总访问次数等,本文将介绍如何基于Redis维护IP访问次数上限。
一般来说,检测IP访问次数上限可以采用以下步骤:
1. 读取Redis中指定IP访问次数,比如哈希表中 key 为 ip 的值自增 1,实现逻辑图:
![](media/image1.png)
2. 根据设定的上限,判断当前次数是否超出限制,如果未超出上限,则放行,反之则拒绝;
3. 访问结束后,返回客户端处理结果。
如 Ruby 代码实现:
# 从Redis中获取限制次数
$redis.hincrby "ip_count", ip, 1# 超出限制,返回
if $redis.hget("ip_count", ip).to_i > limit return {code: flure}
else # 放行,处理
[...] return {code: success}
end
Redis之所以受广泛使用,还因为其优秀的持久化的性能、高可用性和出色的IO,可以对这些限制进行持久化,更可以基于单节点考虑,而不必建立集群架构。
上面的逻辑可以更细分的实现,根据访问IP的频率,可以将请求频繁的IP按照不同的次数上限2020,如20次、100次、200次等做不同限制,随着频繁程度变化,改变相应访问限制。
相关文章