lumen-framework 5.2 - redis 杂文

 

public static function lock($key, $value, $expireSeconds)
    {
        $response = Redis::set($key, $value, 'ex', $expireSeconds, 'nx');
        if($response=='OK'){
            return true;
        }
        return false;
    }

    public static function unlock($key)
    {
        $response = Redis::del($key);
        if($response=='1'){
            return true;
        }
        return false;
    }

    private static function evalScript($script, $numkeys, $keyOrArg1 = null, $keyOrArgN = null){
        $response = Redis::eval($script, $numkeys,$keyOrArg1, $keyOrArgN);
        if($response instanceof \Predis\Response\Status){
            if($response=='OK'){
                return true;
            }
            return false;
        }elseif($response instanceof \Predis\Response\Error){
            return false;
        }else{
            return $response;
        }
    }

    public static function getKeyValue($key){
        return self::evalScript(self::getKeyValueLuaScript(),1,$key);
    }

    private static function getKeyValueLuaScript()
    {
        return <<<'LUA'
return redis.call('GET', KEYS[1])
LUA;
    }


    public function backup(){
        /*$database = app('redis');
        if ($database instanceof \Illuminate\Redis\Database){
            $client = $database->connection('default');
            if ($client instanceof \Predis\Client){
                // 执行命令
                // $client->set($key, $value, 'ex', $expireSeconds, 'nx');
                {
                    $connection = $client->getConnection();
                    if ($connection instanceof \Predis\Connection\StreamConnection) {

                        // 创建命令
                        $command = null;
                        $profile = $client->getProfile();
                        if($profile instanceof \Predis\Profile\RedisVersion300){
                            $command = $profile->createCommand('set', [$value, 'ex', $expireSeconds, 'nx']);
                        }

                        if($command instanceof \Predis\Command\StringSet){
                            // 执行命令
                            $response = $connection->executeCommand($command);

                            if ($response instanceof ResponseInterface) {
                                //  ...
                            }else{
                                $response = $command->parseResponse($response);
                            }
                        }

                    }
                }

            }
        }*/
    }

 

while (!$ok = \App\Logic\RedisLogic::lock($lockKey,1,10)){ // 获取锁
                        if (time() - $starting >= 2) {
                            return []; // 获取锁超时
                        }
                        usleep(750 * 1000);
                    }

  

posted on 2019-11-05 19:44  周~~  阅读(217)  评论(0编辑  收藏  举报

导航