码迷,mamicode.com
首页 > 其他好文 > 详细

redis分布式锁-自动超时锁

时间:2018-07-22 14:11:11      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:返回   out   lease   代码   time()   pre   ide   exp   color   

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分布式锁-自动超时锁

标签:返回   out   lease   代码   time()   pre   ide   exp   color   

原文地址:https://www.cnblogs.com/jiangtao1218/p/9349788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!