Redis - increment 递增方法 | 处理防重复和并发问题


Redis - increment 递增方法 | 处理防重复和并发问题


一、使用场景

  • 1.有时因为网路原因,在保存或其他操作时会发生重复提交问题
  • 2.针对秒杀、抢购、多个用户同时下单的情况(不过redis针对秒杀只是其中的一环)

二、incr 递增函数介绍

  • Redis Incr 命令将 key 中储存的数字值增一。
  • 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
  • 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
  • 本操作的值限制在 64 位(bit)有符号数字表示之内。

INCR 命令是一个针对字符串的操作。 因为 Redis 并没有专用的整数类型, 所以键 key 储存的值在执行 INCR 命令时会被解释为十进制 64 位有符号整数。


三、示例

@PostMapping(value = "/testRedis")
public R testRedis(HttpServletRequest request) {
	// 通过用户ID和访问IP,处理重复请求
	String key = userId + IPUtils.getIpAddr(request);
	Object redisKey = redisTemplate.opsForValue().get(key);
	System.out.println("redis值:" + redisKey);

	// redis中的key值存在则表示当前这次请求距离上一次请求不超过下面设置的三秒钟,直接返回即可
	if(redisKey != null){
		return R.ok("您的操作过快,请刷新重试");
	}
	
	Long count = redisTemplate.opsForValue().increment(key, 1); // 设置递增因子
	System.out.println("递增的值" + count);
	redisTemplate.expire(key, 3, TimeUnit.SECONDS); // 设置过期时间 3秒
	return R.ok("成功");
}

通过这种方法,同样我们也可以用到并发的情况下


四、发散

相关文章:SpringBoot整合Redisson使用分布式锁,模拟茅台抢购场景.


欢迎关注公众号:慌途L
后面会慢慢将文章迁移至公众号,也是方便在没有电脑的情况下可以进行翻阅,更新的话会两边同时更新,大家不用担心!
在这里插入图片描述


  • 18
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Redis的INCR命令是用于对字符串进行操作的。在执行INCR命令时,Redis会将键key存储的值解释为十进制64位有符号整数。\[1\] INCR命令将键中存储的数字值增加1。如果键不存在,则键的值会先被初始化为0,然后再执行INCR操作。如果值的类型错误,或者字符串类型的值无法表示为数字,则会返回错误。此操作的值限制在64位有符号数字表示范围内。\[2\] 在实际应用中,可以使用INCR命令来处理重复并发问题。比如在保存或其他操作时可能会发生重复提交问题,可以使用INCR命令来控制操作的次数。另外,在秒杀、抢购或多个用户同时下单的情况下,也可以使用INCR命令来实现计数功能。\[2\] 在代码中,可以使用redisTemplate.opsForValue().increment(key, 1)来实现递增操作。例如,可以使用redisTemplate.opsForValue().increment("number"+data+1,1L)来设置自增。同时,可以使用redisTemplate.expire(key, 1, TimeUnit.DAYS)来设置键的过期时间。\[3\] 然而,需要注意的是,使用INCR命令时要确保键的值是数字类型,并且能够被表示为数字。否则,会返回错误。此外,还需要注意并发操作可能会导致数据不一致的问题,需要采取相应的措施来保证数据的一致性。\[4\] #### 引用[.reference_title] - *1* *2* [Redis - increment 递增方法 | 处理重复并发问题](https://blog.csdn.net/qq_25112523/article/details/97801092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* *4* [Redis自增(increment)报连接池数量超出异常](https://blog.csdn.net/weixin_41154720/article/details/128871383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值