123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <?php
- namespace Mall\Framework\Core;
- use Mall\Framework\Cache\Redis;
- class RedisQueue
- {
- public static $prefix = 'queue::';
- public static $queueName = 'public_queue';
- protected static $_instance;
- /** @var Redis $redis */
- protected static $redis;
- /**
- * @param Redis $redis redis实例
- * @param string $queueName 队列名称
- *
- * @return mixed
- *
- * @throws \Exception
- */
- public static function getInstance(Redis $redis ,$queueName = 'public_queue')
- {
- if ($redis instanceof \Redis) {
- throw new \Exception('Redis driver not null');
- }
- self::$redis = $redis;
- self::setQueueName($queueName);
- $key = md5(self::$queueName);
- if (!isset(self::$_instance[$key])) {
- self::$_instance[$key] = new self();
- }
- return self::$_instance[$key];
- }
- public static function setQueueName($queueName)
- {
- if ($queueName) {
- self::$queueName = self::$prefix . $queueName;
- }
- }
- /**
- * 添加队列
- *
- * @param string $value 存储的队列
- *
- * @return bool
- */
- public static function push($value)
- {
- return self::$redis->push(self::$queueName, $value, 'start');
- }
- /**
- * 从队列取出数据
- *
- * @param int $number 数量
- *
- * @return array
- */
- public static function pop($number = 1)
- {
- $result = [];
- for ($i = 0; $i < $number; $i++) {
- if ($value = self::$redis->pop(self::$queueName, 'end')) {
- $result[] = $value;
- }
- }
- return $result;
- }
- /**
- * 删除队列
- */
- public static function flushQueue()
- {
- return self::$redis->delete(self::$queueName);
- }
- /**
- * 返回队列的长度
- */
- public function llen()
- {
- return self::$redis->llen(self::$queueName);
- }
- /**
- * 查看队列的 key 是否存在
- */
- public function has()
- {
- return self::$redis->has(self::$queueName);
- }
- }
|