怎么在SpringBoot中使用Redisson实现一个分布式锁

  介绍

怎么在SpringBoot中使用Redisson实现一个分布式锁?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1.1,引入Maven依赖

& lt; dependency>   ,& lt; groupId> org.redisson   ,& lt; artifactId> redisson-spring-boot-starter   ,& lt; version> 3.10.6   & lt;/dependency>

注意:我这里引入的是redisson和springboot的集成包,网上一些教程可能是引入如下配置

& lt; dependency>   ,& lt; groupId> org.redisson   ,& lt; artifactId> redisson   ,& lt; version> 3.6.1   & lt;/dependency>

如果你引入的就是redisson的依赖包,如果该依赖包的版本低于3.5会需要你再引入

& lt; dependency>   ,& lt; groupId> io.netty   ,& lt; artifactId> netty-all   ,& lt; version> 4.1.25.Final   & lt;/dependency>   ,   & lt; dependency>   ,& lt; groupId> com.fasterxml.jackson.core   ,& lt; artifactId> jackson-core   ,& lt; version> 2.9.0   & lt;/dependency>   ,   & lt; dependency>   ,& lt; groupId> com.fasterxml.jackson.core   ,& lt; artifactId> jackson-databind   ,& lt; version> 2.9.0   & lt;/dependency>

这样的一些依赖。

1.2,配置复述,信息

春:
,,用途:
,,,,名字:spring-cloud-product
,,复述:
,,,,端口:6379
,,,,主持人:127.0.0.1
,,,,密码:
,,,,数据库:0
,,,,超时:2000

1.3,配置redisson

怎么在SpringBoot中使用redisson实现一个分布式锁

新建一个redisson-single.yml的配置文件,下面是单机配置,

singleServerConfig:   10000年,idleConnectionTimeout:   1000年,pingTimeout:   10000年,connectTimeout:   超时:,3000   ,retryAttempts: 3   1500年,retryInterval:   3000年,reconnectionTimeout:   ,failedAttempts: 3   ,密码:空   ,subscriptionsPerConnection: 5   ,列出null   ,地址:“复述://127.0.0.1:6379"   ,subscriptionConnectionMinimumIdleSize: 1   ,subscriptionConnectionPoolSize: 50   ,connectionMinimumIdleSize: 32   64年,connectionPoolSize:   ,数据库:0   ,#在最新版本中dns的检查操作会直接报错,所以我直接注释掉了   ,# dnsMonitoring:假的   5000年,dnsMonitoringInterval:   线程:0   nettyThreads: 0   编解码器:! & lt; org.redisson.codec.JsonJacksonCodec>, {}   transportMode :“NIO"

1.4,写一个RedissonConfig配置类,来配置你的redisson

/* *   *,@Description //TODO   *,@Date  $, $   *,@Author  huangwb   * */@ configuration   public  class  RedssonConfig  {   ,@ bean (destroyMethod=皊hutdown")   ,public  RedissonClient  redisson (), throws  IOException  {   RedissonClient 才能;redisson =, Redisson.create (   ,,,Config.fromYAML (new  ClassPathResource (“redisson-single.yml") .getInputStream ()));   return 才能;redisson;   ,}   }

1.5,编写一个秒杀接口

@ autowired   private  RedissonClient  redissonClient;   ,   @Override   public  boolean  decrementProductStore (Long  productId, Integer  productQuantity), {   ,String  key =,“dec_store_lock_", +, productId;   ,RLock  lock =, redissonClient.getLock(关键);   ,try  {//才能加锁,操作很类似Java的ReentrantLock机制   lock.lock才能();   ProductInfo 才能;ProductInfo =, productInfoMapper.selectByPrimaryKey (productId);//才能如果库存为空   if 才能;(productInfo.getProductStock (),==, 0), {   ,,return 假;   ,,}//才能简单减库存操作,没有重新写其他接口了   productInfo.setProductStock才能(productInfo.getProductStock(),安康;1);   productInfoMapper.updateByPrimaryKey才能(productInfo);   ,}catch  (Exception  e), {   System.out.println才能(e.getMessage ());   ,}finally  {//解才能锁   lock.unlock才能();   ,}   ,return 真实;   }

1.6,写一个简单的测试请求,

@GetMapping (“test")   public  String  createOrderTest (), {   (!,if  productInfoService.decrementProductStore (1 l, 1)), {   return 才能“库存不足“;   ,}   ,OrderMaster  OrderMaster =, new  OrderMaster ();   ,//未支付   ,orderMaster.setOrderStatus (0);   ,//未支付   ,orderMaster.setPayStatus (0);   ,orderMaster.setBuyerName(名称);   ,orderMaster.setBuyerAddress(“湖南长沙“);   null   null   null   null   null   null   null

怎么在SpringBoot中使用Redisson实现一个分布式锁