一、为什么要有redis分布式锁,它解决了什么问题?
在传统单体架构的项目下,使用本地锁synchronized和lock锁就可以锁住当前进程,保证线程的安全性,但是本地锁解决不了分布式环境下多个服务资源共享的问题,而分布式锁可以解决这个问题。
二、Redis分布式锁
1.加锁原子性--->set nxex + uuid全局唯一
2.删锁原子性--->通过redis+lua脚本
3.锁自动续期问题--->设置够长的过期时间。
最终目的:多个微服务抢占锁,最终只有一个微服务占用到锁并保证原子性。
三、Redissoon分布式锁
1、获取锁,就算锁名一样,多个微服务也是同一把锁
2、加锁是阻塞式等待,默认加的锁都是30s
3、看门狗自动续期机制:
锁自动续期,如果业务超长,运行期间自动给锁续期上新的30s,不用担心业务时间长,锁自动过期被删除的造成的死锁问题。加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s以后删除。
4、Redisson读写锁
读写锁:保证一定能读取到最新数据,数据修改期间,写锁是一个排它锁,读锁是一个共享锁。
除了读读锁不互斥,其余锁都需要阻塞等待(互斥)。
5、闭锁
Redisson闭锁是一种非常实用的分布式同步工具,可以帮助开发人员解决多线程并发访问共享资源的问题,可以阻塞多个线程,在多个应用程序之间共享,支持自动释放锁,防止因为线程崩溃或其他异常,例如秒杀业务只有10000件商品,用闭锁就可以实现商品不会出现超卖问题
6、Redisson信号量
Redisson信号量是一种分布式锁,它可以控制多个线程对共享资源的访问,比如停车位,并发限流,Redisson信号量基于Redis实现,具有高性能、高可用性和可扩展性等优点。
总结:分布式架构下推荐使用Redisson分布式锁,因为原始的redis分布式锁存在两大严重问题,一是死锁问题、二是锁没有自动续期机制,而Redisson就完美解决了原始redis分布式锁的不足。