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

根据这问题,结合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出来

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐