前言
在微服务的架构设计之下,很多场景都会使用到Redis的分布式锁来实现服务可靠性
目的为了保证服务的可用我们要满足最少以下4个条件:
1.互斥性,任何一个时刻只能有一个客户端持有锁2.杜绝死锁,当一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。3.容错性,只要有一个redis节点是正常的就不会存在不能加解锁的情况4.加锁解锁要是同一个客户端,不能有其他人把锁解了
实现错误代码1
[Java] 纯文本查看 复制代码
?
public class RedisTool {
private static final String LOCK_SUCCESS = "OK";
private static final String SET_IF_NOT_EXIST = "NX";
private static final String SET_WITH_EXPIRE_TIME = "PX";
/** * 尝试获取分布式锁
* @param jedis Redis客户端
* @param lockKey 锁
* @param requestId 请求标识
* @param expireTime 超期时间
* @return 是否获取成功
*/
public static boolean tryGetDistributedLock(Jedis jedis, String lockKey, String requestId, int expireTime) {
String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
Java Redis
最新推荐文章于 2023-06-28 09:58:15 发布
本文详细探讨了在微服务架构中使用Redis实现分布式锁的方法,包括加锁和解锁的正确实现,以及两个常见的实现错误。文章强调了锁的互斥性、避免死锁、容错性和同一客户端加解锁的重要性,并提供了错误代码示例以说明问题所在。
摘要由CSDN通过智能技术生成