网站托管流程,什么是网络社交,江门网络干部学院,网站用户后台是怎么做的Redission遇到其他进程已经占用资源的时候会在指定时间waitTime内进行重试。实现过程如下#xff1a; 执行获取锁的lua脚本时#xff0c;会返回一个值#xff0c;
如果获取锁成功#xff0c;返回nil#xff0c;也就是java里的null
如果获取锁失败#xff0c;用语句“PT… Redission遇到其他进程已经占用资源的时候会在指定时间waitTime内进行重试。实现过程如下 执行获取锁的lua脚本时会返回一个值
如果获取锁成功返回nil也就是java里的null
如果获取锁失败用语句“PTTL KEYS[1]”返回当前锁的剩余有效时间 最终返回到tryLock()函数里成为局部变量ttl的值
time是剩余等待时间的值单位ms
ttl是当前锁的剩余有效时间单位ms 用了redis里的pubsub机制
同时在unlock()函数时候会执行一个redis指令publish广播该锁已经释放 然后在tryLock()函数里会subscribe这个redis的广播订阅该广播也就是订阅别人释放锁的信号
接下来会在time的剩余时间内等待别人释放锁的信号。当收到别人释放锁的信号并且还在time时间内就会再次尝试获取锁 WatchDog机制
如果未设置超时释放时间那么会设置一个30s的默认过期时间也就是Watchdog然后开启一个任务(下图大红框) 每当时间到达设定等待时间的1/3时候就会执行redis指令刷新锁的HSET的过期时间这样就能给锁无限续期了