本章代码演示了使用 Redis 实现分布式锁。
通过 Redis 的 SET 命令(带 NX 和 EX 选项)实现基本的分布式锁功能,演示了锁的获取、锁的互斥性以及锁的超时释放机制。
package com.foxbill.redisinaction;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;
/**
* 用redis实现锁
*/
public class Chapter3 {
public static void start(Jedis jedis) {
lock(jedis);
}
//加锁。核心要点: setnx(原子操作) 加超时(防止死锁)
private static void lock(Jedis jedis) {
String key="chapter3:lock";
String value1 = "lock value1";
String value2 = "lock value2";
long expireSeconds = 10; // 10秒后过期
try {
String result = jedis.set(key, value1, SetParams.setParams().nx().ex(expireSeconds));
System.out.println("- set结果: " + (result != null ? "value1成功设置" : "键已存在,value1未设置"));
Thread.sleep(2000);
String result2 = jedis.set(key, value2, SetParams.setParams().nx().ex(expireSeconds));
System.out.println("- set结果: " + (result2 != null ? "value2成功设置" : "键已存在,value2未设置"));
//等待valu1超时失效后,再次设置
Thread.sleep(11000);
result2 = jedis.set(key, value2, SetParams.setParams().nx().ex(expireSeconds));
System.out.println("- set结果: " + (result2 != null ? "value2成功设置" : "键已存在,value2未设置"));
}catch (Exception e) {
System.err.println("演示setnx和过期时间设置时出错: " + e.getMessage());
e.printStackTrace();
}
}
}
📌 小结
使用 SETNX 原子操作确保锁的互斥性
设置过期时间防止死锁
通过超时机制自动释放锁
:用 Redis 实现分布式锁&spm=1001.2101.3001.5002&articleId=153247725&d=1&t=3&u=1d7b3909af0044d18d293688621b7944)

被折叠的 条评论
为什么被折叠?



