关于使用Redis解决用户重复提交订单的问题

问题场景,秒杀活动,或者其他情况下,用户多次点击下单,导致发生了订单重复提交的问题

根据这问题,结合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 {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid 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出来


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部