Exemplo n.º 1
0
 /**
  * Does a Redis BLPOP on the queue, and blocks until a job is available.
  *
  * @return Job
  */
 function pop()
 {
     $response = $this->redis->blPop($this->key, 10);
     if ($response) {
         list($list, $serializedJob) = $response;
         $job = unserialize($serializedJob);
         return $job;
     }
 }
Exemplo n.º 2
0
 /**
  * @param string $type
  * @param InputMessageIdentifier $identifier
  * @return OutputMessage
  */
 public function getOutput($type, InputMessageIdentifier $identifier)
 {
     $messageId = $identifier->getId();
     $data = $this->redis->hGet($this->getMessageResultKey($type), $messageId);
     if (empty($data)) {
         return null;
     }
     do {
         $resultReady = $this->redis->blPop($this->getMessageResultReadyKey($type, $messageId), 1);
     } while (empty($resultReady));
     $data = $this->redis->hGet($this->getMessageResultKey($type), $messageId);
     $this->redis->hDel($this->getMessageResultKey($type), $messageId);
     return new OutputMessage($data);
 }
Exemplo n.º 3
0
 public function testblockingPop()
 {
     // non blocking blPop, brPop
     $this->redis->delete('list');
     $this->redis->lPush('list', 'val1');
     $this->redis->lPush('list', 'val2');
     $this->assertTrue($this->redis->blPop(array('list'), 2) === array('list', 'val2'));
     $this->assertTrue($this->redis->blPop(array('list'), 2) === array('list', 'val1'));
     $this->redis->delete('list');
     $this->redis->lPush('list', 'val1');
     $this->redis->lPush('list', 'val2');
     $this->assertTrue($this->redis->brPop(array('list'), 1) === array('list', 'val1'));
     $this->assertTrue($this->redis->brPop(array('list'), 1) === array('list', 'val2'));
     // blocking blpop, brpop
     $this->redis->delete('list');
     $this->assertTrue($this->redis->blPop(array('list'), 1) === array());
     $this->assertTrue($this->redis->brPop(array('list'), 1) === array());
     // TODO: fix this broken test.
     //		$this->redis->delete('list');
     //		$params = array(
     //			0 => array("pipe", "r"),
     //			1 => array("pipe", "w"),
     //			2 => array("file", "/dev/null", "w")
     //		);
     //		if(function_exists('proc_open')) {
     //			$env = array('PHPREDIS_key' =>'list', 'PHPREDIS_value' => 'value');
     //			$process = proc_open('php', $params, $pipes, '/tmp', $env);
     //
     //			if (is_resource($process)) {
     //				fwrite($pipes[0],  '<?php
     //	sleep(2);
     //	$r = new Redis;
     //	$r->connect("'.self::HOST.'", '.self::PORT.');
     //	if("'.addslashes(self::AUTH).'") {
     //		$r->auth("'.addslashes(self::AUTH).'");
     //	}
     //	$r->lPush($_ENV["PHPREDIS_key"], $_ENV["PHPREDIS_value"]);
     //	?' . '>');
     //
     //				fclose($pipes[0]);
     //				fclose($pipes[1]);
     //				$re = proc_close($process);
     //
     //				$this->assertTrue($this->redis->blPop(array('list'), 5) === array("list", "value"));
     //			}
     //		}
 }
Exemplo n.º 4
0
 public function getResult($taskId)
 {
     $serializedTaskResult = $this->redis->hGet($this->getTaskResultKey(), $taskId);
     if (empty($serializedTaskResult)) {
         return null;
     }
     do {
         $resultReady = $this->redis->blPop($this->getTaskResultReadyKey($taskId), 1);
     } while (empty($resultReady));
     $serializedTaskResult = $this->redis->hGet($this->getTaskResultKey(), $taskId);
     $taskResult = unserialize($serializedTaskResult);
     $this->redis->hDel($this->getTaskResultKey(), $taskId);
     if ($taskResult instanceof TaskException) {
         throw $taskResult;
     }
     return $taskResult;
 }
Exemplo n.º 5
0
 public function testblockingPop()
 {
     // non blocking blPop, brPop
     $this->redis->del('list');
     $this->redis->lPush('list', 'val1');
     $this->redis->lPush('list', 'val2');
     $this->assertTrue($this->redis->blPop(array('list'), 2) === array('list', 'val2'));
     $this->assertTrue($this->redis->blPop(array('list'), 2) === array('list', 'val1'));
     $this->redis->del('list');
     $this->redis->lPush('list', 'val1');
     $this->redis->lPush('list', 'val2');
     $this->assertTrue($this->redis->brPop(array('list'), 1) === array('list', 'val1'));
     $this->assertTrue($this->redis->brPop(array('list'), 1) === array('list', 'val2'));
     // blocking blpop, brpop
     $this->redis->del('list');
     $this->assertTrue($this->redis->blPop(array('list'), 1) === array());
     $this->assertTrue($this->redis->brPop(array('list'), 1) === array());
 }
Exemplo n.º 6
0
 /**
  * @inheritDoc
  */
 public function listen($timeout)
 {
     /** @noinspection PhpMethodParametersCountMismatchInspection */
     $this->redis->blPop($this->name, $timeout);
 }
Exemplo n.º 7
0
 protected function tryLock()
 {
     $this->redis->watch('lock');
     $result = $this->redis->blPop(array('lock'), static::LOCK_TIMEOUT);
     return !empty($result);
 }
Exemplo n.º 8
0
    die('CLI access only');
}
require 'helper.php';
require 'class/minecraftforum.php';
require 'class/ipbxmlrpc.php';
require 'config/application.php';
$redis = new Redis();
$redis->connect(REDIS_IP, REDIS_PORT);
$redis->auth(REDIS_AUTH);
$minecraftforum = new Minecraftforum();
$minecraftforum->authenticate(MCF_USER, MCF_PASS);
$user_updates = array();
echo 'Authenticated with IPB' . "\n";
while (true) {
    // listen for new users
    $user = $redis->blPop("users", 5);
    if (!$user) {
        continue;
    }
    $user_data = json_decode($user[1]);
    if (@isset($user_updates[$user_data->member_id]) && @$user_updates[$user_data->member_id] > time() - 120) {
        echo "user {$user_data->member_id} skipping, already updated in the last 120 seconds (2 mins) :)\n";
        continue;
    }
    $update = $minecraftforum->edit_member($user_data->member_id, array("field_16" => $user_data->time), $user_data->view_key);
    if ($update) {
        $log_string = "user {$user_data->member_id} updated (time: {$user_data->time})" . "\n";
        $user_updates[$user_data->member_id] = time();
    } else {
        $log_string = "user {$user_data->member_id} could not be updated, invalid key :( (time: {$user_data->time})" . "\n";
    }
Exemplo n.º 9
0
 /**
  * 出队列
  * @param $list1 string 队列名
  * @param $deriction int 0:数据入队列头(左) 1:数据入队列尾(右) 默认为0
  * @param $list2 string 第二个队列名 默认null
  * @param $timeout int timeout为0:只获取list1队列的数据 
  *        timeout>0:如果队列list1为空 则等待timeout秒 如果还是未获取到数据 则对list2队列执行pop操作
  */
 public static function listPop($list1, $deriction = 0, $list2 = null, $timeout = 0)
 {
     $redis = new \Redis();
     $redis->connect(self::_HOST, self::_PORT);
     $return = null;
     switch ($direction) {
         case 0:
             if ($timeout && $list2) {
                 $return = $redis->blPop($list1, $list2, $timeout);
             } else {
                 $return = $redis->lPop($list1);
             }
             break;
         case 1:
             if ($timeout && $list2) {
                 $return = $redis->brPop($list1, $list2, $timeout);
             } else {
                 $return = $redis->rPop($list1);
             }
             break;
         default:
             $return = false;
             break;
     }
     $redis->close();
     $redis = null;
     return $return;
 }