8-1 分布式锁有哪些实现方式? redis是如何实现分布式锁的?讲一讲Redisson实现分布式锁的原理
分布式锁是用于协调分布式系统中多个节点并发访问共享资源的机制,在分布式系统中,由于多个节点,节点之间的并发操作可能导致数据不一致或者冲突问题,分布式锁就是解决这个问题的。
分布式锁的基本思想是通过在共享资源周围加上互斥的访问控制,确保只能有一个节点能够访问该资源,
常见的实现方式有:
基于数据库:使用数据库中的行级锁或者乐观锁实现分布式锁,通过在数据库中插一条带有唯一约束的记录作为锁标识,控制并发访问。
基于缓存:利用分布式缓存(如Redis)的原子性操作实现分布式锁,通过在缓存中设置一个特定的键值对作为锁标识,控制并发访问;
Redis实现分布式锁的基本原理是利用Redis的操作原子性和单线程特性。
通过使用SET命令的NX(not exist)参数,实现在分布式环境下的锁操作的原子性和一致性,这样可以保证在同一时间只有一个客户端能够成功获取锁,从而实现对共享资源的互斥访问。
Redisson实现分布式锁的原理:
获取锁:当一个客户端尝试获取锁时,Redisson使用Redis的SETNX命令来尝试在Redis中设置一个指定的键值对作为标识,如果该键值对不存在,则表示获取锁成功,否则,获取锁失败;
设置过期时间:在获取锁成功之后,Redisson会为这个锁设置一个过期时间,即使持有锁的客户端崩溃或忘记释放锁,锁也会在一段时间之后自动释放,避免死锁的情况发送;
释放锁:当客户端使用完锁之后,需要主动调用释放锁的操作,Redisson会使用Lua脚本来保证释放锁的原子性,避免因为网络延迟或者其他原因导致的不一致性;
支持可重入锁:Redisson还支持可重入锁的特性,同一线程可以多次获取同一个锁,需要对应释放相同次数的锁才能真正的释放锁;
通过利用Redis的原子性和分布式特性,Redisson提供了一种可靠而高效的分布式锁实现,方便开发人员在分布式环境下进行并发和控制;
8-2介绍一下你们项目中优惠卷的功能
在我们的项目中优惠卷的使用,系统呢会根据优惠卷类型,计算出用户享受的优惠金额或折扣,在结算时自动扣除对应的金额,如果用户有多个优惠卷只能选择一个优惠卷使用