美文网首页
redis 分布式锁

redis 分布式锁

作者: 夢醒皆涳 | 来源:发表于2018-01-21 19:49 被阅读0次

利用setnx命令的原子性

 /**
     * 获取锁
     * @param  String  $key    锁标识
     * @param  Int     $expire 锁过期时间
     * @return Boolean
     */
    public function lock($key, $expire=5){
        //time()+$expire 如果存在返回0 不存在则设置此值并返回1
        $is_lock = $this->_redis->setnx($key, time()+$expire);

        // 锁存在
        if(!$is_lock){

            // 判断锁是否过期
            $lock_time = $this->_redis->get($key);

            // 锁已过期,删除锁,重新获取
            if(time()>$lock_time){
                $this->unlock($key);
                $is_lock = $this->_redis->setnx($key, time()+$expire);
            }
        }
        //设置锁过期时间
        $this->_redis->setTimeout($key, $expire);
        return $is_lock? true : false;
    }

相关文章

网友评论

      本文标题:redis 分布式锁

      本文链接:https://www.haomeiwen.com/subject/cpyqaxtx.html