redis incr和incrBy的使用说明

网友投稿 1749 2023-03-07

redis incr和incrBy的使用说明

redis incr和incrBy的使用说明

最近用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、总结

除了简单计数,还可以实现控制用户单位时间内请求等,可根据业务需求灵活运用;

有兴趣可以参考下这篇文章,简单实用 //jb51.net/article/200492.htm

补充知识http://: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) 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]>

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解java连接mysql数据库的五种方式
下一篇:java实现斗地主发牌功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~