redis incr和incrBy的使用说明
最近用incr和incrBy在接口里做了下埋点统计每天请求总数,这两个命令还是挺好用的,先说下这俩命令吧
注:redis后台服务是串行的单线程执行,不存在并发,即多线程调用Incr/incrby方法,在redis服务器上仍然是串行的单线程执行,不存在并发,所以这俩命令都是原子自增、线程安全的。
1、Incr命令(菜鸟教程)
RedisIncr命令将key中储存的数字值增一。
如果key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在64位(bit)有符号数字表示之内。
2、RedisIncrby命令
RedisIncrby命令将key中储存的数字加上指定的增量值。
如果key不存在,那么key的值会先被初始化为0,然后再执行INCRBY命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在64位(bit)有符号数字表示之内。
3、实现按天统计的思路
以你自定义的字符串+当前年月日作为key;例:
publicstaticfinalStringBATCH_COMMIT_DAY_COUNT="test:wugui:"; publicstaticStringgetCurrentDate(){ SimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-dd"); returnsimpleDateFormat.format(newDate()); }
redisClient.incr(BATCH_COMMIT_DAY_COUNT+DateUtil.getCurrentDate());//redis的key
当然我并没有为这个key用expire设置超时时间,因为我需要保留每天的统计;
incrBy可以在现有值的基础上累加你的增量值,比如你要在一个批量审核接口里统计每天批量审核的所有人数,例:
redisClient.incrBy(BATCH_COMMIT_DAY_COUNT+DateUtil.getCurrentDate(),63l);
注意redis的incrBy第二个参数是long类型,不是参数名的integer.....
publicLongincrBy(finalStringkey,finallonginteger){ checkIsInMultiOrPipeline(); client.incrBy(key,integer); returnclient.getIntegerReply(); }
4、总结
除了简单计数,还可以实现控制用户单位时间内请求等,可根据业务需求灵活运用;
有兴趣可以参考下这篇文章,简单实用//www.nhooo.com/article/200492.htm
补充知识:redis之incrby、incr、hincrby的使用
一、incrby
1、说明
RedisIncrby命令将key中储存的数字加上指定的增量值。
2、语法
INCRBYKEY_NAMEINCR_AMOUNT
二、incr
1、说明
RedisIncr命令将key中储存的数字值增一。
2、语法
INCRKEY_NAME
三、hincrby
1、说明
RedisHincrby命令用于为哈希表中的字段值加上指定增量值。
2、语法
HINCRBYKEY_NAMEFIELD_NAMEINCR_BY_NUMBER
四、实例
192.168.230.21:6379[8]>incrbyvalue12 (integer)12 192.168.230.21:6379[8]>getvalue "12" 192.168.230.21:6379[8]>incrvalue (integer)13 192.168.230.21:6379[8]>getvalue "13" 192.168.230.21:6379[8]>getvalue "13" 192.168.230.21:6379[8]>incrvalue (integer)14 192.168.230.21:6379[8]>getvalue "14" 192.168.230.21:6379[8]>incrbyvalue10 (integer)24 192.168.230.21:6379[8]>getvalue "24" 192.168.230.21:6379[8]>incrbyvalue-5 (integer)19 192.168.230.21:6379[8]>getvalue "19" 192.168.230.21:6379[8]>hincrbymykeymyfield0 (integer)0 192.168.230.21:6379[8]>hincrbymykeymyfield5 (integer)5 192.168.230.21:6379[8]>hincrbymykeymyfield7 (integer)12 192.168.230.21:6379[8]>hincrbymykeymyfield014 (integer)4 192.168.230.21:6379[8]>hincrbymykeymyfield019 (integer)13 192.168.230.21:6379[8]>hgetallmykey 1)"myfield" 2)"12" 3)"myfield01" 4)"13" 192.168.230.21:6379[8]>hincrbymykeymyfield01-4 (integer)9 192.168.230.21:6379[8]>hgetallmykey 1)"myfield" 2)"12" 3)"myfield01" 4)"9" 192.168.230.21:6379[8]>
以上这篇redisincr和incrBy的使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。