关于使用Redis解决用户重复提交订单的问题
问题场景,秒杀活动,或者其他情况下,用户多次点击下单,导致发生了订单重复提交的问题根据这问题,结合Redis的Redis Incr 命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。这个特性,我们
·
问题场景,秒杀活动,或者其他情况下,用户多次点击下单,导致发生了订单重复提交的问题
根据这问题,结合Redis的
Redis Incr 命令将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
这个特性,我们就有了一个解决用户重复提交订单的问题,案例代码如下
package com.example.demo2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
class Demo2ApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
while (true) {
//插入数据
Long increment = redisTemplate.boundHashOps("A").increment("B", 1);
if (increment > 1) {
System.out.println("出现重复:"+increment);
if (increment>100){
//关机
System.exit(0);
}
}else {
System.out.println("第一次排队:"+increment);
}
}
}
}
在循环内,不停的请求插入数据,然后判定返回值,在最后在一定程度后关机,把插入数据的行为改到控制层或者业务层,然后判定返回值,根据返回值的不同给出不同的业务逻辑,此处为继续循环,等到循环100次之后关闭程序
关于具体怎么搭建整合Redis的SpringBoot,就在这里不细说了,
下一期,将弄一个整合Redis分布式锁的Demo出来
更多推荐
已为社区贡献1条内容
所有评论(0)