redis分布式锁
2021-04-15 17:13:08 64 举报
redis分布式锁设计实现流程,利用时间轮,线程池,lua脚本 实现可重入/不可重入的非公平锁
作者其他创作
大纲/内容
1
业务方法
worker
ThreadPool线程池
自旋抢占锁不会直接失败(可以设置做大自旋次数)
将每一秒需要续期的任务利用线程池执行
利用hash链表的结构,保证了链表的顺序性,又保证了hash查询的效率
加锁成功
时间轮
重入次数
业务执行完之后,如果是锁重入的线程,只减少redis中的重入次数;否则删除锁,并且移除给锁续期的进程
Hash表
unlock()
ThreadA
失败
Daemon3
ThreadB
线程ID
成功
lua脚本保证事务
Daemon2
如果是锁重入的线程 则不重复启动续期机制;否则启动锁续期机制 加入到时间轮 进行定时续期
利用redis的hash表结构,根据线程ID实现锁的可重入
AOP
redis
lock()
加锁成功后 执行业务逻辑
Daemon1
0 条评论
下一页