Redis——分布式锁
基本原理
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁
为什么要有分布式锁?
在只有一台服务器提供服务的情况下,乐观锁和悲观锁足以解决线程并发导致的问题。但是企业开发中避免不了需要部署多台服务器,即采用分布式系统或集群模式,这时,多台服务器就有多个jvm,对应多个锁监视器,它们之间是独立了,服务器之间的线程并不会共享锁信息,此时很可能会出现并发问题,很容易想到一个解决办法就是将让所有线程共享一个锁监视器,这就是我们分布式锁的基本思路。
核心思想
分布式锁的核心思想就是让大家都使用同一把锁,这样我们就可以不让线程并行,而是让程序串行执行
分布式锁应该满足的特点
- 高可用性
- 多线程可见
- 互斥
- 高性能
- 安全性
常见的分布式锁
不同的分布式锁有不同的特点,对应不同的应用场景,没有绝对的优劣之分,我们要根据不同场景选择合适的分布式锁。
Redis中分布式锁的实现方式
实现分布式锁时需要实现的两个基本方法:
-
获取锁:
- 互斥:确保只能有一个线程获取锁
- 非阻塞:尝试一次,成功返回true,失败返回false
-
释放锁:
- 手动释放
- 超时释放:获取锁时添加一个超时时间