redis incr和incrBy的使用說明
最近用incr和incrBy在接口里做了下埋點(diǎn)統(tǒng)計每天請求總數(shù),這兩個命令還是挺好用的,先說下這倆命令吧
注:redis后臺服務(wù)是串行的單線程執(zhí)行,不存在并發(fā),即多線程調(diào)用Incr/incrby方法,在redis服務(wù)器上仍然是串行的單線程執(zhí)行,不存在并發(fā),所以這倆命令都是原子自增、線程安全的。
1、Incr 命令 (菜鳥教程)
Redis Incr 命令將 key 中儲存的數(shù)字值增一。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 INCR 操作。
如果值包含錯誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數(shù)字表示之內(nèi)。
2、Redis Incrby 命令
Redis Incrby 命令將 key 中儲存的數(shù)字加上指定的增量值。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 INCRBY 命令。
如果值包含錯誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數(shù)字表示之內(nèi)。
3、實(shí)現(xiàn)按天統(tǒng)計的思路
以你自定義的字符串+當(dāng)前年月日 作為key ;例:
public static final String BATCH_COMMIT_DAY_COUNT="test:wugui:"; public static String getCurrentDate() { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); return simpleDateFormat.format(new Date()); }
redisClient.incr(BATCH_COMMIT_DAY_COUNT + DateUtil.getCurrentDate());//redis的key
當(dāng)然我并沒有為這個key用expire設(shè)置超時時間,因為我需要保留每天的統(tǒng)計;
incrBy 可以在現(xiàn)有值的基礎(chǔ)上累加你的增量值,比如你要在一個批量審核接口里統(tǒng)計每天批量審核的所有人數(shù),例:
redisClient.incrBy(BATCH_COMMIT_DAY_COUNT + DateUtil.getCurrentDate(), 63l);
注意redis的 incrBy 第二個參數(shù)是long類型,不是參數(shù)名的integer.....
public Long incrBy(final String key, final long integer) { checkIsInMultiOrPipeline(); client.incrBy(key, integer); return client.getIntegerReply(); }
4、總結(jié)
除了簡單計數(shù),還可以實(shí)現(xiàn)控制用戶單位時間內(nèi)請求等,可根據(jù)業(yè)務(wù)需求靈活運(yùn)用;
有興趣可以參考下這篇文章,簡單實(shí)用 //www.dbjr.com.cn/article/200492.htm
補(bǔ)充知識:redis之incrby、incr、hincrby的使用
一、incrby
1、說明
Redis Incrby 命令將 key 中儲存的數(shù)字加上指定的增量值。
2、語法
INCRBY KEY_NAME INCR_AMOUNT
二、incr
1、說明
Redis Incr 命令將 key 中儲存的數(shù)字值增一。
2、語法
INCR KEY_NAME
三、hincrby
1、說明
Redis Hincrby 命令用于為哈希表中的字段值加上指定增量值。
2、語法
HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER
四、實(shí)例
192.168.230.21:6379[8]> incrby value 12 (integer) 12 192.168.230.21:6379[8]> get value "12" 192.168.230.21:6379[8]> incr value (integer) 13 192.168.230.21:6379[8]> get value "13" 192.168.230.21:6379[8]> get value "13" 192.168.230.21:6379[8]> incr value (integer) 14 192.168.230.21:6379[8]> get value "14" 192.168.230.21:6379[8]> incrby value 10 (integer) 24 192.168.230.21:6379[8]> get value "24" 192.168.230.21:6379[8]> incrby value -5 (integer) 19 192.168.230.21:6379[8]> get value "19" 192.168.230.21:6379[8]> hincrby mykey myfield 0 (integer) 0 192.168.230.21:6379[8]> hincrby mykey myfield 5 (integer) 5 192.168.230.21:6379[8]> hincrby mykey myfield 7 (integer) 12 192.168.230.21:6379[8]> hincrby mykey myfield01 4 (integer) 4 192.168.230.21:6379[8]> hincrby mykey myfield01 9 (integer) 13 192.168.230.21:6379[8]> hgetall mykey 1) "myfield" 2) "12" 3) "myfield01" 4) "13" 192.168.230.21:6379[8]> hincrby mykey myfield01 -4 (integer) 9 192.168.230.21:6379[8]> hgetall mykey 1) "myfield" 2) "12" 3) "myfield01" 4) "9" 192.168.230.21:6379[8]>
以上這篇redis incr和incrBy的使用說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中Object toString方法簡介_動力節(jié)點(diǎn)Java學(xué)院整理
Object類在Java里面是一個比較特殊的類,JAVA為了組織這個類組織得比較方便,它提供了一個最根上的類,相當(dāng)于所有的類都是從這個類繼承,這個類就叫Object。接下來通過本文給大家介紹Object toString方法,需要的的朋友參考下吧2017-05-05

SpringBoot 整合Redisson重寫cacheName支持多參數(shù)的案例代碼

Apache?SkyWalking?監(jiān)控?MySQL?Server?實(shí)戰(zhàn)解析

java內(nèi)存異常使用導(dǎo)致full?gc頻繁

SpringBoot實(shí)現(xiàn)國密SM4加密解密的使用示例

Java?Timer與TimerTask類使程序計時執(zhí)行