当前位置: 首页 > news >正文

分布式锁-Redission快速入门

实战篇Redis

5、分布式锁-redission

5.2 分布式锁-Redission快速入门

引入依赖:

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version>
</dependency>

配置Redisson客户端:

@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient(){// 配置Config config = new Config();config.useSingleServer().setAddress("redis://192.168.150.101:6379").setPassword("123321");// 创建RedissonClient对象return Redisson.create(config);}
}

如何使用Redission的分布式锁

@Resource
private RedissionClient redissonClient;@Test
void testRedisson() throws Exception{//获取锁(可重入),指定锁的名称RLock lock = redissonClient.getLock("anyLock");//尝试获取锁,参数分别是:获取锁的最大等待时间(期间会重试),锁自动释放时间,时间单位boolean isLock = lock.tryLock(1,10,TimeUnit.SECONDS);//判断获取锁成功if(isLock){try{System.out.println("执行业务");          }finally{//释放锁lock.unlock();}}}

在 VoucherOrderServiceImpl

注入RedissonClient

@Resource
private RedissonClient redissonClient;@Override
public Result seckillVoucher(Long voucherId) {// 1.查询优惠券SeckillVoucher voucher = seckillVoucherService.getById(voucherId);// 2.判断秒杀是否开始if (voucher.getBeginTime().isAfter(LocalDateTime.now())) {// 尚未开始return Result.fail("秒杀尚未开始!");}// 3.判断秒杀是否已经结束if (voucher.getEndTime().isBefore(LocalDateTime.now())) {// 尚未开始return Result.fail("秒杀已经结束!");}// 4.判断库存是否充足if (voucher.getStock() < 1) {// 库存不足return Result.fail("库存不足!");}Long userId = UserHolder.getUser().getId();//创建锁对象 这个代码不用了,因为我们现在要使用分布式锁//SimpleRedisLock lock = new SimpleRedisLock("order:" + userId, stringRedisTemplate);RLock lock = redissonClient.getLock("lock:order:" + userId);//获取锁对象boolean isLock = lock.tryLock();//加锁失败if (!isLock) {return Result.fail("不允许重复下单");}try {//获取代理对象(事务)IVoucherOrderService proxy = (IVoucherOrderService) AopContext.currentProxy();return proxy.createVoucherOrder(voucherId);} finally {//释放锁lock.unlock();}}
http://www.lryc.cn/news/339449.html

相关文章:

  • IDEA 本地库引入了依赖但编译时找不到
  • hadoop最新详细版安装教程 2024 最新版
  • Unity 中画线
  • 【快捷部署】017_MongoDB(6.0.14)
  • Android中的Zygote进程介绍
  • 世界需要和平--中介者模式
  • PHPStudy(小皮)切换PHP版本PDO拓展失效的问题
  • Golang 基于共享变量的并发锁
  • 探索分布式技术--------------注册中心zookeeper
  • 剑指offer之牛客与力扣——前者分类题单中的题目在后者的链接
  • C# WinForm —— 05 控件简介
  • JavaEE实验三:3.5学生信息查询系统(动态Sql)
  • 【爬虫开发】爬虫从0到1全知识md笔记第5篇:Selenium课程概要,selenium的其它使用方法【附代码文档】
  • 【我的代码生成器】React的FrmUser类源码
  • Flutter 单例模式的多种实现方法与使用场景分析
  • C语言洛谷题目分享(9)奇怪的电梯
  • vue 中使 date/time/datetime 类型的 input 支持 placeholder 方法
  • 书生·浦语大模型全链路开源体系-第3课
  • Weblogic任意文件上传漏洞(CVE-2018-2894)漏洞复现(基于vulhub)
  • 链表基础3——单链表的逆置
  • Fiddler:网络调试利器
  • 【笔记】mysql版本6以上时区问题
  • Scala实战:打印九九表
  • Excel文件解析
  • 纯css实现switch开关
  • Unity3d 微信小游戏 AB资源问题
  • Leetcode二叉树刷题
  • 如何给自己的网站添加 https ssl 证书
  • Vue路由跳转及路由传参
  • 计算机网络常见面试总结