为什么需要刷新信号量呢,因为信号量有过期时间;
为什么信号量需要过期时间呢,因为需要利用超时特性,解决分布式锁存在的一些固有缺陷。
而对于类似流式API来说,一般10秒的过期时间是远远不够的。因此我们需要对信号量进行刷新,以防止其过期。
因为公平信号量区分开了“超时有序集合”和“信号量拥有者有序集合”,所以程序只需要对超时有序集合进行更新就可以立即刷新信号量的超时时间了。
程序结构如下:
def refresh_fair_semaphore(conn,semname,identifier);
if conn.zadd(semname,identifier,time.time())://更新客户端持有的信号量
release_fair_semaphore(conn,semname,identifier) //刷新失败,释放信号量
return false;
return true; //客户端仍持有信号量