【Redis】Redis实现分布式锁

1. 基于Redis

1.1 加锁

java 复制代码
 setnx lockKey uniqueValue

1.2 解锁

基于Lua脚本保证解锁的原子性。Redis在执行Lua脚本时,可以以原子性的方式执行,确保原子性。

java 复制代码
if redis.call("get", keys[1]) == argv[1] then 
	return redis.call("del", keys[1])
else
	return 0
end

1.3 避免锁无法被释放

给key设置过期时间

set lockKey uniqueValue EX 3 NX

1.4 优雅续期

Redisson的分布式锁自带自动续期机制,提供专门用来监控和续期的Watch Dog看门狗,如果操作的共享资源的线程还未执行完的话,Watch Dog会不断延长锁的过期时间,进而保证锁不会因为超时而释放。

默认每过10秒,看门狗会将锁的超时时间设置为30秒。

2. Redisson

java 复制代码
RLock lock = redisson.getLock("myLock");
try {
	// 超时等待,锁自动释放
    // 尝试获取锁,最多等待100秒,锁自动释放时间为10秒
    if (lock.tryLock(100, 10, TimeUnit.SECONDS)) {
        // 临界区代码
        System.out.println("Got the lock!");
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
	// 锁被当前线程持有,才会进行释放锁
    if (lock.isHeldByCurrentThread()) {
        lock.unlock();
    }
}
相关推荐
进取星辰2 小时前
18. LangChain分布式任务调度:大规模应用的性能优化
分布式·性能优化·langchain
酷爱码3 小时前
hadoop存储数据文件原理
大数据·hadoop·分布式
苦学编程啊4 小时前
深入理解Redis SDS:高性能字符串的终极设计指南
数据库·redis·缓存·c#
Chan164 小时前
Redis从入门到实战实战篇2
java·数据库·redis·spring·lua
深山技术宅4 小时前
Redis TLS 加密对性能的影响分析
数据库·redis·缓存
小陈爱建模4 小时前
[更新完毕]2025东三省C题深圳杯C题数学建模挑战赛数模思路代码文章教学: 分布式能源接入配电网的风险分析
分布式·数学建模·能源
编程学委5 小时前
基于Redis实现-UV统计
数据库·redis·uv
敖云岚6 小时前
【Redis】Another Redis Desktop Manager 安装指南
java·redis·github
睎zyl13 小时前
在spark里通过jps命令,看到的进程
大数据·分布式·spark
听闻风很好吃14 小时前
Redis应用场景实战:穿透/雪崩/击穿解决方案与分布式锁深度剖析
数据库·redis·分布式