通过Redis、Memcache的 incr 原子操作防刷机制的使用差别

xiaoxiao2025-08-04  32

我的版本如下: Redis:3.2.100 Memcache:1.4.4

最近在处理服务器压力测试的时候,想到一个方案,在一定时间段内限制用户访问次数。具体的实现就是通过redis的院子操作increment 来实现计数器计数(memcache是通过incr方法) 这个可以作为很多防刷场景的策略,也可以用于确实业务上所需的限制比如1分钟内发验证码次数限制,防止刷验证码。

具体在实现过程中遇到个细微的差异:

redis的increment操作,如果对应的key不存在,会自动创建并且初始化为0,然后执行incement操作,那么首次对某个key执行increment操作时会返回1(不需要自己先判断是否存在这个key之类的操作),官方文档有说明:->点我查看官方文档<-

memcache的默认incr(key, by)操作,如果对应的key不存在,会报错。->点我查看官方wiki说明:<- 不过如果你使用的是net.spy.memcached.MemcachedClient这个java客户端来操作memcache的话,它提供了更多的选择,可以通过这些接口传默认值、超时时间进去,让它自动帮你初始化不存在的key:

转载请注明原文地址: https://www.6miu.com/read-5034283.html

最新回复(0)