Redis(SET key value NX PX time)分布式锁的实现
2021-04-19 08:40:29 0 举报
登录查看完整内容
Redis(SET key value NX PX time)分布式锁的实现
作者其他创作
大纲/内容
同步方法
Tomcat
客户端
加锁
秒杀方法(检查数据库中的剩余库存)
服务器2
目标:给秒杀方法加锁,分布式系统(不同主机)上只有一个线程能执行这个方法1、获取锁:执行SET lock_key_方法名 value NX PX time,如果返回执行成功则表示获取锁成功。否则获取锁失败,(value为一个随机值或者是线程ID,设置过期时间是为了防止死锁)。2、解锁 del lock_key;去删除lock_key; 用try-finally这样就确保了所有主机上同一时间只有一个线程可以执行该方法。
锁
请求
服务器3
redis
服务器1
用SET lock_key_方法名 value NX PX time(毫秒)可以实现分布式锁,解锁的时候删除lock_key
Nginx
线程A
这种做法会出现一个问题:可能锁过期了但是方法还没有执行完解决方案:加锁之后开启一个守护线程定时地去执行超时时间更新的操作,方法执行完之后显式关掉守护线程。
服务器4
守护线程
超时前一秒延长超时时间
0 条评论
回复 删除
下一页