介绍
怎么在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
新建一个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实现一个分布式锁