php实习redis锁机制

Posted Sentiger

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php实习redis锁机制相关的知识,希望对你有一定的参考价值。

<?php

class Redis_lock
{

    public static function getRedis()
    {
        $redis = new redis();
        $redis->connect(‘182.254.208.72‘, 3838, 0);
        $redis->auth(‘eh.123‘);
        return $redis;
    }

    public static function lock($key, $expire = 60)
    {
        if(!$key) {
            return false;
        }
        $redis = self::getRedis();
        do {
            if($acquired = ($redis->setnx("Lock:{$key}", time()))) { // 如果redis不存在,则成功
                $redis->expire($key, $expire);
                break;
            }

            usleep($expire);

        } while (true);

        return true;
    }

    //释放锁
    public static function release($key)
    {
        if(!$key) {
            return false;
        }
        $redis = self::getRedis();
        $redis->del("Lock:{$key}");
        $redis->close();
    }


}


$redis = Redis_lock::getRedis();
Redis_lock::lock(‘lock‘);
$re = $redis->get(‘Sentiger‘);
$re--;
$redis->set(‘Sentiger‘, $re);
Redis_lock::release(‘lock‘);



?>

测试可以 用ab测试工具测试

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

PHP+Redis 实现乐观锁机制

Redis实现分布式锁(设计模式应用实战)

Redis实现分布式锁(设计模式应用实战)

悲观锁乐观锁说明与实现

用redis实现悲观锁(后端语言以php为例)

使用redis实现简单的锁机制