Redis - increment 递增方法 | 处理防重复和并发问题 - Go语言中文社区

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使用分布式锁,模拟茅台抢购场景.


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_25112523/article/details/97801092
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-03 20:54:43
  • 阅读 ( 365 )
  • 分类:Redis

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢