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、总结

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

有兴趣可以参考下这篇文章,简单实用 //www.jb51.net/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) 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的使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决RedisTemplate调用increment报错问题

    使用spring redis的increment方法时,报错: nested exception is redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range 一.INCRBY key increment INCRBY key increment介绍如下: 将 key 所储存的值加上增量 increment .如果 key 不存在,那么 key 的值会先被初始化为

  • 使用Redis incr解决并发问题的操作

    项目背景: 1.新增问题件工单,工单中有工单编码字段,工单编码字段的规则为 "WT"+yyyyMMdd+0000001. 2.每天的工单生成量是30W,所以会存在并发问题 解决思路: 1.首先乐观的认为redis不会宕机,对应的缓存不会被清除(除非人为操作,人为操作会有独立的补救办法) 2.将工单编码存到缓存中(redis),其值只存"WT"+yyyyMMdd后面的数字部分: 对应的key为:key标识+yyyyMMdd,即每天一个key 3.每次生成工单编码时,先

  • Redis原子计数器incr,防止并发请求操作

    一.前言 在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试.这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流量冲击而崩溃.对于系统崩溃带来的后果,显然还是拒绝一部分请求更能被维护者所接受. 而在各种限流中,除了系统自身设计的带锁机制的计数器外,利用Redis实现显然是一种既高效安全又便捷方便的方式. 二.incr命令 Redis Incr 命令将 key 中储存的数字值增一. 如果 key 不存在,那么

  • 使用redis的increment()方法实现计数器功能案例

    一直知道redis可以用来实现计数器功能,但是之前没有实际使用过,昨天碰到一个需求:用户扫码当天达到20次即提示:当日扫码次数达到上限! 当时就想到使用redis的递增方法increment()来实现计数器功能,一定要注意redisTemplate和stringRedisTemplate的使用 首先设置key: 该key我使用了用户id和当天日期作为key的一部分,date:xxxx-xx-xx格式,这样一来该用户在第二天扫码的时候又是一个新key,因为日期不同了 设置key的过期时间: 实现计

  • 利用spring-data-redis实现incr自增的操作

    应该有不少人在使用spring-data-redis时遇到各种各样的问题.反正我是遇到了. 由于是隔了一段时间才写的本篇博客,也懒得去重现哪些错误场景了,下面凭着记忆写了几个我遇到的问题: redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range 使用的RedisTemplate,做读写操作时候,都是要经过序列化和反序列化. 这时你使用redisTemplate.o

  • redis incr和incrBy的使用说明

    最近用incr和incrBy在接口里做了下埋点统计每天请求总数,这两个命令还是挺好用的,先说下这俩命令吧 注:redis后台服务是串行的单线程执行,不存在并发,即多线程调用Incr/incrby方法,在redis服务器上仍然是串行的单线程执行,不存在并发,所以这俩命令都是原子自增.线程安全的. 1.Incr 命令 (菜鸟教程) Redis Incr 命令将 key 中储存的数字值增一. 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. 如果值包含错误的类

  • Redis 键值设计使用总结

    目录 前言 Redis使用中不规范的现象 Redis 使用业务场景推荐与建议 如何设计出优雅的key 一.遵循如下几个最佳实践约定 二.尽量避免bigkey 三.使用恰当的数据类型 Redis 缓存在实际应用中的使用建议 使用业务规范 前言 对redis的使用,想必做过后端开发的同学都不陌生,redis为key/value非关系型数据库,使用起来简单高效,支持的数据类型也比较丰富,几乎在日常开发中没有不涉及的: 但如果对redis使用比较深入的话,还需要综合考虑多方面的因素,比如使用redis时

  • 超强、超详细Redis数据库入门教程

    [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动redis 6.使用redis客户端 7.redis数据结构 – 简介 8.redis数据结构 – strings 9.redis数据结构 – lists 10.redis数据结构 – 集合 11.redis数据结构 – 有序集合 12.redis数据结构 – 哈希 13.聊聊redis持久化 – 两种方式 14.聊聊redis持久化 – RDB 15.聊聊redis持

  • Redis教程(二):String数据类型

    一.概述: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的Value最多可以容纳的数据长度是512M. 二.相关命令列表: 命令原型 时间复杂度 命令描述 返回值 APPENDkeyvalue O(1) 如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾.如果该Key不存在,APPEND命令将会创建一个新的Key/V

  • redis实现计数器-防止刷单方法介绍

    最近由于双11要来临,公司需要在接口请求上,做一下并发限制的处理,或者做一个防止刷单的安全拦截: 比如:一个接口请求,限制每秒请求总数为200次,超过200次就等待,等下一秒,再次请求,这里用到一个redis作为一个计数器的模式来实现. 调用redis的方法: INCR key 将 key 中储存的数字值增一. 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误. 这是一个针对字符串的

  • Redis瞬时高并发秒杀方案总结

    1.Redis 丰富的数据结构(Data Structures) 字符串(String) Redis字符串能包含任意类型的数据;: 一个字符串类型的值最多能存储512M字节的内容: 利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用: 使用APPEND命令在字符串后添加内容. 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序: 你可以添加一个元素到列表的头部(左边:LPUSH)或者尾部(右边:RPUSH): 一个列表最多可以包含232-1个

  • redis数据类型及应用场景知识点总结

    redis数据类型及应用场景 Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 一.string 简介:Strings数据类型是最常用.简单的key-value类型,普通的key/ value 存储都可以归为此类.value不仅可以是字符串,也可以是数字.因为是二进制安全的,所以你完全可以把一个图片文件的内容作为string来存储.Redis的string可以完全实现目前memcached的功能,

  • Docker安装Redis并介绍可视化客户端进行操作

    1 简介 Redis是使用ANSI C语言开发的基于Key-Value的高性能NoSQL数据库,在解决高并发.高可用等一系列问题中,它扮演着重要的角色.它的优势主要有: 速度快.持久化.原子性.数据结构丰富.多语言支持. 本文将简单介绍如何通过Docker安装Redis,并简单使用与操作. 2 Docker安装与使用 2.1 Docker安装 拉取Redis镜像,选择目前最新的稳定版本5.0.8: $ docker pull redis:5.0.8 建议配置成阿里云的镜像,速度会快很多.拉取成功

随机推荐