使用 redis 做分布式锁时,遇到客户端挂掉,如何正确的释放锁?或者执行任务的时间超过锁的过期时间,如果续期?

使用 redis 做分布式锁时,遇到客户端挂掉,如何正确的释放锁?—— 给锁设置一个过期时间

Q:如果持有锁的客户端挂了,这个锁还加着怎么办?只能等超时自动释放吗?

是的,因为 redis server 没有主动检测长连接是否断开从而释放锁的能力

如果需要主动能力:需要使用 ZooKeeper, etcd, Consul 这些高级的专门的锁服务

Q:如果执行任务的耗时大于一开始设置锁的过期时间怎么办?

客户端使用「看门狗」实现自动续约,这个需要配合后台线程实现,非常的麻烦


universe_king
3.4k 声望680 粉丝