zookeeper1
zookeeper1
Redisson实现分布式锁
1. 锁的类型
- 排他锁 : 不允许多个程序(线程/进程),同时访问某个共享资源
- 共享锁
2. 分布式锁
- 跨进程实现共享资源的互斥
- 分布式锁的实现方案
- redis
- mysql
- zookeeper
- …
3. Redisson实现分布式锁的原理
3.1 Redisson实现分布式锁关键点
- Lua脚本(实现锁的抢占或获取)
- HashedWheel (时间轮) 实现过期的自动续期
- Pub/Sub机制(当获得锁的线程释放之后,通知处于阻塞状态下的线程去抢占锁)
3.2 Redisson源码分析
RedissonLock.tryLock
tryAcquire
tryLockInnerAsync
unlock释放锁流程
4.Redisson实现分布式锁源码分析
Redis中的发布/订阅机制
# 发布
publish channel.1 "hello world"
# 订阅
subscribe channel.1
5. Lua脚本
Lua的下载与安装
array = {"zhangsan","lisi"}
for i = 0,2 do
print(array[i])
end
Redis中调用Lua脚本
eval "return redis.call('set', KEYS[1], ARGV[1])" 1 luaKey hello