时间:2021-05-19
最近用incr和incrBy在接口里做了下埋点统计每天请求总数,这两个命令还是挺好用的,先说下这俩命令吧
注:redis后台服务是串行的单线程执行,不存在并发,即多线程调用Incr/incrby方法,在redis服务器上仍然是串行的单线程执行,不存在并发,所以这俩命令都是原子自增、线程安全的。
1、Incr 命令 (菜鸟教程)
Redis Incr 命令将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
2、Redis Incrby 命令
Redis Incrby 命令将 key 中储存的数字加上指定的增量值。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
3、实现按天统计的思路
以你自定义的字符串+当前年月日 作为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
当然我并没有为这个key用expire设置超时时间,因为我需要保留每天的统计;
incrBy 可以在现有值的基础上累加你的增量值,比如你要在一个批量审核接口里统计每天批量审核的所有人数,例:
redisClient.incrBy(BATCH_COMMIT_DAY_COUNT + DateUtil.getCurrentDate(), 63l);
注意redis的 incrBy 第二个参数是long类型,不是参数名的integer.....
public Long incrBy(final String key, final long integer) { checkIsInMultiOrPipeline(); client.incrBy(key, integer); return client.getIntegerReply(); }4、总结
除了简单计数,还可以实现控制用户单位时间内请求等,可根据业务需求灵活运用;
有兴趣可以参考下这篇文章,简单实用 ///article/200492.htm
补充知识:redis之incrby、incr、hincrby的使用
一、incrby
1、说明
Redis Incrby 命令将 key 中储存的数字加上指定的增量值。
2、语法
INCRBY KEY_NAME INCR_AMOUNT
二、incr
1、说明
Redis Incr 命令将 key 中储存的数字值增一。
2、语法
INCR KEY_NAME
三、hincrby
1、说明
Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。
2、语法
HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER
四、实例
192.168.230.21:6379[8]> incrby value 12(integer) 12192.168.230.21:6379[8]> get value"12"192.168.230.21:6379[8]> incr value(integer) 13192.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) 14192.168.230.21:6379[8]> get value"14"192.168.230.21:6379[8]> incrby value 10(integer) 24192.168.230.21:6379[8]> get value"24"192.168.230.21:6379[8]> incrby value -5(integer) 19192.168.230.21:6379[8]> get value"19"192.168.230.21:6379[8]> hincrby mykey myfield 0(integer) 0192.168.230.21:6379[8]> hincrby mykey myfield 5(integer) 5192.168.230.21:6379[8]> hincrby mykey myfield 7(integer) 12192.168.230.21:6379[8]> hincrby mykey myfield01 4(integer) 4192.168.230.21:6379[8]> hincrby mykey myfield01 9(integer) 13192.168.230.21:6379[8]> hgetall mykey1) "myfield"2) "12"3) "myfield01"4) "13"192.168.230.21:6379[8]> hincrby mykey myfield01 -4(integer) 9192.168.230.21:6379[8]> hgetall mykey1) "myfield"2) "12"3) "myfield01"4) "9"192.168.230.21:6379[8]>以上这篇redis incr和incrBy的使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
系统唯一ID生成分案有很多种,例如:数据库auto_increment,UUID,Redis生成ID(Redis原子操作INCR和INCRBY),Twiitte
支付宝的钱怎么转到银行卡支付宝使用说明支付宝的钱怎么转到银行卡支付宝使用说明支付宝的钱怎么转到银行卡支付宝使用说明支付宝的钱怎么转到银行卡支付宝使用说明支付宝的
前言如果要统计一篇文章的阅读量,可以直接使用Redis的incr指令来完成。如果要求阅读量必须按用户去重,那就可以使用set来记录阅读了这篇文章的所有用户id,
复制代码代码如下:/**函数名称:DateUtil*作者:yithcn*功能说明:日期函数*使用说明:*创建日期:2010.10.14*/varDateUtil
概述:@Valid是使用Hibernatevalidation的时候使用@Validated是只用SpringValidator校验机制使用说明:java的JS