php實現redis鎖機制


<?php

class Redis_lock
{

    public static function getRedis()
    {
        $redis = new redis();
        $redis->connect('127.0.0.1', 3838, 0);
        $redis->auth('xxx');
        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測試工具測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM