分布式锁有哪些实现方式?reids是如何实现分布式锁的?讲一讲Redisson实现分布式锁的原理?
Redisson的加锁、设置过期时间等操作基于lua脚本完成(保证多条Redis命令的原子性)
- Redisson实现分布锁的流程
- 首先线程会先尝试获取锁
- 尝试加锁成功后,redisson会再开一个Watch dog(看门狗)线程来监控持有锁的线程。
- 看门狗线程会每隔releaseTime(默认30秒)/3的时间做一次续期,增加线程持有锁的时间
- 同时线程操作redis,完成之后手动释放锁,redisson自动通知Watch dog撤销线程的监控。
- 当有新线程来获取锁时,会先尝试加锁,加锁失败会进行重试,重试的时间可以在代码中通过.tryLock设置重试时间,它是可以在高并发的情况,提高分布式锁的使用性能
补充:介绍一下你们项目中的优惠券功能
使用优惠券功能在我的项目中有以下几个流程:
首先,在订单确认页面查询可用优惠方案,主要判断订单是否符合优惠的条件,例如满减门槛或者是否适用优惠券的分类;
其次,在订单创建页面核销优惠券、查询优惠券优惠明细、查询优惠规则;
最后,当用户取消订单时,还需要退还优惠券;支付后退订单、优惠券则不用退还处理;