慌途L 2019-08-11 15:51:20 21316 收藏 25
分类专栏: 日常记录 Redis 文章标签: redis increment 防重复 并发 递增
版权
日常记录
同时被 2 个专栏收录
39 篇文章0 订阅
订阅专栏
Redis
3 篇文章0 订阅
订阅专栏
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("成功");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
通过这种方法,同样我们也可以用到并发的情况下
————————————————
版权声明:本文为CSDN博主「慌途L」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_25112523/article/details/97801092