redis分布式锁-自动超时锁

Posted 手握太阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis分布式锁-自动超时锁相关的知识,希望对你有一定的参考价值。

1、加锁代码结构

2、解锁代码结构

3、java实例

4、测试类

5、测试日志

 

加锁代码结构

def acquire_lock_with_timeout(conn,lockname,acquire_timeout,lock_timeout)
    identifer=uuid.uuid4
    lockname=‘lock:‘+lockname
    repeat_end_time=current_time()+acquire_timeout
    
    while current_time<repeat_end_time
        if conn.setnx(lockname,identifer)
            conn.expire(lockname,lock_timeout)
            return identifer
        elif not conn.ttl(lockname)
            conn.expire(lockname,lock_timeout)
        time.sleep(0.001)
    return false

 

解锁代码结构

def release_loc(conn,lockname,identifer)
    pipe=conn.pipeline(true)
    lockname=‘lock:‘+lockname
    while True
        try:
            pipe.watch(lockname)
            if pipe.get(lockname) == identifer   // 检查进程是否仍然是有锁,若未持有锁,则返回false
                pipe.multi()
                pipe.delete(lockname)
                pipe.execute
                return true
            pipe.unwatch()
            break
        except redis.exceptions.WatchError
            pass    // 有其他客户端修改了锁,重试
    return False

 

以上是关于redis分布式锁-自动超时锁的主要内容,如果未能解决你的问题,请参考以下文章

110期面试官:Redis分布式锁如何解决锁超时问题?

用 Go + Redis 实现分布式锁

单实例redis分布式锁的简单实现

redis实现分布式锁

redis分布式锁深度剖析(超时情况)

聊聊Redis那些事(下篇)