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.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)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中Object toString方法簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Object類在Java里面是一個(gè)比較特殊的類,JAVA為了組織這個(gè)類組織得比較方便,它提供了一個(gè)最根上的類,相當(dāng)于所有的類都是從這個(gè)類繼承,這個(gè)類就叫Object。接下來通過本文給大家介紹Object toString方法,需要的的朋友參考下吧2017-05-05
LinkedBlockingQueue鏈?zhǔn)阶枞?duì)列的使用和原理解析
這篇文章主要介紹了LinkedBlockingQueue鏈?zhǔn)阶枞?duì)列的使用和原理解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
SpringBoot 整合Redisson重寫cacheName支持多參數(shù)的案例代碼
這篇文章主要介紹了SpringBoot 整合Redisson重寫cacheName支持多參數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
Apache?SkyWalking?監(jiān)控?MySQL?Server?實(shí)戰(zhàn)解析
這篇文章主要介紹了Apache?SkyWalking?監(jiān)控?MySQL?Server?實(shí)戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
java內(nèi)存異常使用導(dǎo)致full?gc頻繁
Full?GC是Java虛擬機(jī)中垃圾回收的一種方式,它會暫停應(yīng)用程序所有的線程并清理整個(gè)堆內(nèi)存。頻繁的Full?GC會導(dǎo)致應(yīng)用程序的性能下降,甚至出現(xiàn)長時(shí)間的停頓。Java內(nèi)存異常使用常常是Full?GC頻繁出現(xiàn)的原因之一,如使用大量的靜態(tài)變量、內(nèi)存泄漏等。2023-04-04
SpringBoot實(shí)現(xiàn)國密SM4加密解密的使用示例
在商用密碼體系中,SM4主要用于數(shù)據(jù)加密,本文就來介紹一下SpringBoot實(shí)現(xiàn)國密SM4加密解密的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
使用IDEA創(chuàng)建一個(gè)vert.x項(xiàng)目的方法
這篇文章主要介紹了使用IDEA創(chuàng)建一個(gè)vert.x項(xiàng)目的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
Java?Timer與TimerTask類使程序計(jì)時(shí)執(zhí)行
這篇文章主要介紹了Java定時(shí)器中的Timer和TimerTask的原理。Timer主要用于Java線程里指定時(shí)間或周期運(yùn)行任務(wù),它是線程安全的,但不提供實(shí)時(shí)性(real-time)保證。接下來就跟隨小編一起深入了解Timer和TimerTask吧2022-02-02

