【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();
    }
}
相关推荐
what丶k4 小时前
深入解析Redis数据持久化:RBD机制原理、实操与生产最佳实践
数据库·redis·缓存
珠海西格7 小时前
“主动预防” vs “事后补救”:分布式光伏防逆流技术的代际革命,西格电力给出标准答案
大数据·运维·服务器·分布式·云计算·能源
Dreamboat-L7 小时前
Redis及其两种持久化技术详解
数据库·redis·缓存
三水不滴8 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
企鹅侠客9 小时前
第35章—内核解析篇:Redis内存淘汰机制
数据库·redis
曹轲恒9 小时前
【Redis持久化核心】AOF/RDB通俗详解+多场景对比
数据库·redis·bootstrap
小邓吖9 小时前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
优雅的潮叭10 小时前
cud编程之 reduce
android·redis·缓存
打工的小王10 小时前
redis(三)redis持久化和集群(redis版本:5.0.4)
数据库·redis·缓存
心之伊始11 小时前
Redis 持久化机制深度解析(RDB / AOF / 混合持久化)
数据库·redis·bootstrap