8-1 分布式锁有哪些实现方式? redis是如何实现分布式锁的? 讲一讲Redisson实现分布式锁的原理
分布式锁是用于协调分布式系统中多个节点并发访问共享资源的机制。在分布式系统中,由于存在多个节点,节点之间的并发操作可能导致数据不一致或冲突的问题。分布式锁的目的是解决这个问题。
分布式锁的基本思想是通过在共享资源周围加上互斥的访问控制,确保同时只有一个节点能够访问该资源。
常见的实现方式有:
基于数据库:使用数据库中的行级锁或乐观锁实现分布式锁。通过在数据库中插入一条带有唯一约束的记录作为锁标识,控制并发访问。
基于缓存:利用分布式缓存(如Redis)的原子性操作实现分布式锁。通过在缓存中设置一个特定的键值对作为锁标识,控制并发访问。
Redis实现分布式锁的基本原理是利用Redis的操作原子性和单线程特性。
通过使用SET命令的NX(not exist)参数,实现在分布式环境下的锁操作的原子性和一致性,这样可以保证在同一时间只有一个客户端能够成功获取锁,从而实现对共享资源的互斥访问。
Redisson实现分布式锁的原理
Redisson是基于Redis的功能丰富的框架,它实现分布式锁的流程如下:
首先,尝试加锁。Redisson客户端会通过hash算法选择Redis主从集群中的一个主节点,并执行lua脚本进行加锁。如果加锁不成功,说明已有客户端占有了锁,那么则循环不停尝试枷锁。
如果枷锁成功,锁的默认生存时间为30S。
然后Redisson会通过watchdog(看门狗)机制每隔10s监视当前客户端是否持有锁,如果继续持有,则延长生存时间。
最后,释放锁。
8-2 补充:介绍一下你们项目中的优惠券功能
我们项目中优惠券的使用,系统会根据优惠券的类型,系统需要计算出用户享受的优惠金额或折扣,并在结算时自动扣减相应的金额。其中若用户有多个优惠券只能选择一张优惠券进行使用。