redis 锁


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")
  • 设定锁当,程序未执行完,过期时间没到怎么办,锁就会被其他进程使用,
  • 这里是现有业务的时候, 去取得锁,会起一个线程已知去重新 设定 过期时间, 只要程序执行完,通过释放 设定过期时间的线程取释放锁,解决了 业务未完,锁被其他线程占用
  • 而当程序奔溃的时候,等待最后一次过期时间结束,其他进程也可以使用

posted on 2019-06-16 23:31  游荡的鱼  阅读(95)  评论(0编辑  收藏  举报

导航