Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/mautic.corals.io/vendor/malkusch/lock/classes/mutex/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/mautic.corals.io/vendor/malkusch/lock/classes/mutex/PHPRedisMutex.php
<?php

namespace malkusch\lock\mutex;

use Redis;
use RedisException;
use malkusch\lock\exception\LockAcquireException;
use malkusch\lock\exception\LockReleaseException;

/**
 * Mutex based on the Redlock algorithm using the phpredis extension.
 *
 * This implementation requires at least phpredis-2.2.4.
 *
 * @author Markus Malkusch <[email protected]>
 * @license WTFPL
 *
 * @link http://redis.io/topics/distlock
 * @link bitcoin:1P5FAZ4QhXCuwYPnLZdk3PJsqePbu1UDDA Donations
 */
class PHPRedisMutex extends RedisMutex
{
    /**
     * Sets the connected Redis APIs.
     *
     * The Redis APIs needs to be connected yet. I.e. Redis::connect() was
     * called already.
     *
     * @param Redis[] $redisAPIs The Redis connections.
     * @param string  $name      The lock name.
     * @param int     $timeout   The time in seconds a lock expires, default is 3.
     *
     * @throws \LengthException The timeout must be greater than 0.
     */
    public function __construct(array $redisAPIs, $name, $timeout = 3)
    {
        parent::__construct($redisAPIs, $name, $timeout);
    }
    
    /**
     * @internal
     */
    protected function add($redis, $key, $value, $expire)
    {
        /** @var Redis $redis */
        try {
            //  Will set the key, if it doesn't exist, with a ttl of $expire seconds
            return $redis->set($key, $value, ["nx", "ex" => $expire]);
        } catch (RedisException $e) {
            $message = sprintf(
                "Failed to acquire lock for key '%s' at %s",
                $key,
                $this->getRedisIdentifier($redis)
            );
            throw new LockAcquireException($message, 0, $e);
        }
    }

    /**
     * @internal
     */
    protected function evalScript($redis, $script, $numkeys, array $arguments)
    {
        /** @var Redis $redis */

        /*
         * If a serializion mode such as "php" or "igbinary" is enabled, the arguments must be serialized but the keys
         * must not.
         *
         * @issue 14
         */
        for ($i = $numkeys, $iMax = \count($arguments); $i < $iMax; $i++) {
            $arguments[$i] = $redis->_serialize($arguments[$i]);
        }

        try {
            return $redis->eval($script, $arguments, $numkeys);
        } catch (RedisException $e) {
            $message = sprintf(
                "Failed to release lock at %s",
                $this->getRedisIdentifier($redis)
            );
            throw new LockReleaseException($message, 0, $e);
        }
    }

    /**
     * @internal
     */
    protected function getRedisIdentifier($redis)
    {
        /** @var Redis $redis */
        return sprintf("redis://%s:%d?database=%s", $redis->getHost(), $redis->getPort(), $redis->getDBNum());
    }
}

Spamworldpro Mini