通过Redis、Memcache的 incr 原子操作防刷机制的使用差别
我的版本如下:
Redis:3.2.100
Memcache:1.4.4
最近在處理服務(wù)器壓力測試的時候,想到一個方案,在一定時間段內(nèi)限制用戶訪問次數(shù)。具體的實(shí)現(xiàn)就是通過redis的院子操作increment 來實(shí)現(xiàn)計(jì)數(shù)器計(jì)數(shù)(memcache是通過incr方法)
這個可以作為很多防刷場景的策略,也可以用于確實(shí)業(yè)務(wù)上所需的限制比如1分鐘內(nèi)發(fā)驗(yàn)證碼次數(shù)限制,防止刷驗(yàn)證碼。
具體在實(shí)現(xiàn)過程中遇到個細(xì)微的差異:
-
redis的increment操作,如果對應(yīng)的key不存在,會自動創(chuàng)建并且初始化為0,然后執(zhí)行incement操作,那么首次對某個key執(zhí)行increment操作時會返回1(不需要自己先判斷是否存在這個key之類的操作),官方文檔有說明:->點(diǎn)我查看官方文檔<-
-
memcache的默認(rèn)incr(key, by)操作,如果對應(yīng)的key不存在,會報(bào)錯。->點(diǎn)我查看官方wiki說明:<-
不過如果你使用的是net.spy.memcached.MemcachedClient這個java客戶端來操作memcache的話,它提供了更多的選擇,可以通過這些接口傳默認(rèn)值、超時時間進(jìn)去,讓它自動幫你初始化不存在的key:
轉(zhuǎn)載于:https://www.cnblogs.com/xiaocy66/p/10589260.html
總結(jié)
以上是生活随笔為你收集整理的通过Redis、Memcache的 incr 原子操作防刷机制的使用差别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小程序上拉加载,下拉刷新
- 下一篇: mysql中group by 的用法解析