分布式锁一般有三种实现方式:
数据库乐观锁;
基于 Redis 的分布式锁;
基于 ZooKeeper 的分布式锁
本篇博客将介绍第二种方式, 基于 Redis 实现分布式锁. 虽然网上已经有各种介绍 Redis 分布式锁实现的博客, 然而他们的实现却有着各种各样的问题, 为了避免误人子弟, 本篇博客将详细介绍如何正确地实现 Redis 分布式锁.
首先, 为了确保分布式锁可用, 我们至少要确保锁的实现同时满足以下四个条件:
1. 互斥性. 在任意时刻, 只有一个客户端能持有锁. 2. 不会发生死锁. 即使有一个客户端在持有锁的期间崩溃而没有主动解锁, 也能保证后续其他客户端能加锁. 3. 具有容错性. 只要大部分的 Redis 节点正常运行, 客户端就可以加锁和解锁. 4. 解铃还须系铃人. 加锁和解锁必须是同一个客户端, 客户端自己不能把别人加的锁给解了.
代码实现
组件依赖 首先我们要通过 Maven 引入 Jedis 开源组件, 在 pom.xml 文件加入下面的代码:
- Redis.clients
- jedis
- 2.9.0
来源: https://www.2cto.com/kf/201904/802546.html