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

时间:2023-03-08 17:22:46

我的版本如下:

Redis:3.2.100

Memcache:1.4.4

最近在处理服务器压力测试的时候,想到一个方案,在一定时间段内限制用户访问次数。具体的实现就是通过redis的院子操作increment 来实现计数器计数(memcache是通过incr方法)

这个可以作为很多防刷场景的策略,也可以用于确实业务上所需的限制比如1分钟内发验证码次数限制,防止刷验证码。

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

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

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

  • memcache的默认incr(key, by)操作,如果对应的key不存在,会报错。->点我查看官方wiki说明:<-

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

    不过如果你使用的是net.spy.memcached.MemcachedClient这个java客户端来操作memcache的话,它提供了更多的选择,可以通过这些接口传默认值、超时时间进去,让它自动帮你初始化不存在的key:

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