redis 锁

Posted wanderingfish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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")
  • 设定锁当,程序未执行完,过期时间没到怎么办,锁就会被其他进程使用,
  • 这里是现有业务的时候, 去取得锁,会起一个线程已知去重新 设定 过期时间, 只要程序执行完,通过释放 设定过期时间的线程取释放锁,解决了 业务未完,锁被其他线程占用
  • 而当程序奔溃的时候,等待最后一次过期时间结束,其他进程也可以使用

以上是关于redis 锁的主要内容,如果未能解决你的问题,请参考以下文章

分布式锁三种解决方案

PHP中redis加锁和解锁的简单实现

分布式锁Redis分布式锁注解灵活实现

间谍高度(上帝视角)和redis分布式锁

Redis进阶学习03---Redis完成秒杀和Redis分布式锁的应用

分布式Redis锁并发编程Redis分布式锁实例