redis incr和incrBy的使用說明
最近用incr和incrBy在接口里做了下埋點(diǎn)統(tǒng)計(jì)每天請求總數(shù),這兩個(gè)命令還是挺好用的,先說下這倆命令吧
注:redis后臺服務(wù)是串行的單線程執(zhí)行,不存在并發(fā),即多線程調(diào)用Incr/incrby方法,在redis服務(wù)器上仍然是串行的單線程執(zhí)行,不存在并發(fā),所以這倆命令都是原子自增、線程安全的。
1、Incr 命令 (菜鳥教程)
Redis Incr 命令將 key 中儲存的數(shù)字值增一。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 INCR 操作。
如果值包含錯(cuò)誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個(gè)錯(cuò)誤。
本操作的值限制在 64 位(bit)有符號數(shù)字表示之內(nèi)。
2、Redis Incrby 命令
Redis Incrby 命令將 key 中儲存的數(shù)字加上指定的增量值。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 INCRBY 命令。
如果值包含錯(cuò)誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個(gè)錯(cuò)誤。
本操作的值限制在 64 位(bit)有符號數(shù)字表示之內(nèi)。
3、實(shí)現(xiàn)按天統(tǒng)計(jì)的思路
以你自定義的字符串+當(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)然我并沒有為這個(gè)key用expire設(shè)置超時(shí)時(shí)間,因?yàn)槲倚枰A裘刻斓慕y(tǒng)計(jì);
incrBy 可以在現(xiàn)有值的基礎(chǔ)上累加你的增量值,比如你要在一個(gè)批量審核接口里統(tǒng)計(jì)每天批量審核的所有人數(shù),例:
redisClient.incrBy(BATCH_COMMIT_DAY_COUNT + DateUtil.getCurrentDate(), 63l);
注意redis的 incrBy 第二個(gè)參數(shù)是long類型,不是參數(shù)名的integer.....
public Long incrBy(final String key, final long integer) {
checkIsInMultiOrPipeline();
client.incrBy(key, integer);
return client.getIntegerReply();
}
4、總結(jié)
除了簡單計(jì)數(shù),還可以實(shí)現(xiàn)控制用戶單位時(shí)間內(nèi)請求等,可根據(jù)業(yè)務(wù)需求靈活運(yùn)用;
有興趣可以參考下這篇文章,簡單實(shí)用 //www.dhdzp.com/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)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一次線上websocket返回400問題排查的實(shí)戰(zhàn)記錄
最近項(xiàng)目中有端對端通信場景,實(shí)時(shí)性要求較高,考慮后選用了websocket 這一通信協(xié)議,下面這篇文章主要給大家介紹了一次線上websocket返回400問題排查的實(shí)戰(zhàn)記錄,需要的朋友可以參考下2022-04-04
在spring boot中使用java線程池ExecutorService的講解
今天小編就為大家分享一篇關(guān)于在spring boot中使用java線程池ExecutorService的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
SpringBoot?如何使用sharding?jdbc進(jìn)行分庫分表
這篇文章主要介紹了SpringBoot?如何使用sharding?jdbc進(jìn)行分庫分表,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java實(shí)現(xiàn)FTP批量大文件上傳下載篇1
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)FTP批量大文件上傳下載的基礎(chǔ)篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
Spring Boot通過Junit實(shí)現(xiàn)單元測試過程解析
這篇文章主要介紹了Spring Boot通過Junit實(shí)現(xiàn)單元測試過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
java報(bào)錯(cuò):找不到或無法加載主類的解決方法簡單粗暴
本文主要介紹了java報(bào)錯(cuò):找不到或無法加載主類的解決方法簡單粗暴,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

