SpringBoot整合Redisson使用分布式锁,模拟茅台抢购场景

一、前言介绍

前段时间研究了下分布式锁,实现分布式锁也有很多种方案,有基于数据库,基于zookeeper,基于redis+lua。一般我们常用redis+lua进行实现,zookeeper对于没有使用它的项目而言再加入进去就比较麻烦了,redis是比较简单的实现方案。redisson封装好了redis+lua,我们可以很方便的使用。也看到很多博客对redisson进行分析源码,这里我就不多做分析, 大家可以参考文末列举的一两个参考博客链接。

redissongithub地址:https://github.com/redisson/redisson.


二、项目Demo

2.1.Demo下载地址

关注微信公众号:慌途L,发送:茅台,即可拿到资料。
在这里插入图片描述


2.2.模拟用户抢购

运行项目后先调用接口(http://localhost:9099/redisson/queryInventory)将库存数量缓存到redis,再使用JMeter模拟多人抢购,不懂使用JMeter的自行百度搜索使用教程,这里就不多做解释了。


2.2.1.将库存缓存到redis

调用第一个接口后redis中会缓存有100个库存,我们使用500个线程循环10次,模拟用户抢购。
在这里插入图片描述


2.2.2.JMeter设置线程数:

在这里插入图片描述


2.2.3.JMeter设置http请求:

在这里插入图片描述


2.2.4.调用结果

在这里插入图片描述

redis中的库存数量
在这里插入图片描述


结论:可以看到,我们并没有超卖


三、怎么避免一个用户重复抢购?并发高了怎么处理?

既然都是抢购了,肯定要限制一个人最多能抢几件商品,抢到了再来重复下单,应该怎么处理这种问题?

这里提供一个思路,大家可以发散的想一下


四、POM依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.17.0</version>
</dependency>

五、配置类,可配置单节点和集群

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 描述:
 * 创建人:huangtuL
 */
@Configuration
public class MyRedissonConfig {

    /**
     * 单节点redis
     */
    @Bean
    public RedissonClient getRedissionClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        return Redisson.create(config);
    }

    /**
     * 集群环境多节点redis
     */
//    @Bean
//    public RedissonClient getRedissionClusterClient(){
//        Config config=new Config();
//        //集群模式,集群节点的地址须使用“redis://”前缀,否则将会报错。
//        //此例集群为3节点,各节点1主1从
//        config.useClusterServers().addNodeAddress("redis://192.168.188.128:7001", "redis://192.168.188.128:7002",
//                "redis://192.168.188.128:7003", "redis://192.168.188.128:7004", "redis://192.168.188.128:7005",
//                "redis://192.168.188.128:7006");
//        return Redisson.create(config);
//    }
}

六、参考博客


欢迎关注公众号:慌途L
后面会慢慢将文章迁移至公众号,也是方便在没有电脑的情况下可以进行翻阅,更新的话会两边同时更新,大家不用担心!
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值