import threading
import time
from redis import Redis
class Myredis(Redis):
def __init__(self):
super(Myredis, self).__init__(host="192.168.31.21", port=6379, db=0, password="a123456")
def mysetex(self,name,time,value):
print("this")
set_sign = self.setex(name,time,value)
if set_sign:
t1 = threading.Thread(target=self.whileSetTime,args=(name, time))
t1.start()
print("start")
print("my_process")
return 1
else:
print("锁被占用直接结束")
return 0
def whileSetTime(self,name,set_time):
set_time_p = set_time/2
self.over_sign = 1
print(set_time_p)
while(1):
time.sleep(set_time_p)
print("set time")
self.expire(name,set_time)
if not self.over_sign:
self.delete(name)
return 0
A = Myredis()
a= "test4"
A.mysetex(a,4,"2")
time.sleep(6)
print(A.get(a),A.ttl(a))
print("my work")
A.over_sign = 0
print("work is end")
- 设定锁当,程序未执行完,过期时间没到怎么办,锁就会被其他进程使用,
- 这里是现有业务的时候, 去取得锁,会起一个线程已知去重新 设定 过期时间, 只要程序执行完,通过释放 设定过期时间的线程取释放锁,解决了 业务未完,锁被其他线程占用
- 而当程序奔溃的时候,等待最后一次过期时间结束,其他进程也可以使用