/**
  * @inheritdoc
  * @throws NotSupportedException
  */
 public function subscribe($subscriber_id, $label = null, $categories = null, $exceptions = null)
 {
     if ($this->blocking) {
         if ($exceptions !== null) {
             throw new NotSupportedException('Redis queues does not support pattern exceptions in blocking (pubsub) mode.');
         }
         foreach ($categories as $category) {
             if (($c = rtrim($category, '*')) !== $category) {
                 $this->redis->psubscribe($category);
             } else {
                 $this->redis->subscribe($category);
             }
         }
         return;
     }
     $now = new \DateTime('now', new \DateTimezone('UTC'));
     $subscription = new Subscription();
     $subscription->setAttributes(['subscriber_id' => $subscriber_id, 'label' => $label, 'categories' => $categories, 'exceptions' => $exceptions !== null ? $exceptions : [], 'created_on' => $now->format('Y-m-d H:i:s')]);
     $this->redis->hset($this->id . self::SUBSCRIPTIONS_HASH, $subscriber_id, serialize($subscription));
 }
 /**
  * Creates an array of Subscription objects from DbSubscription objects.
  * @param  DbSubscription|array $dbSubscriptions one or more DbSubscription objects
  * @return array                of Subscription objects
  */
 public static function createSubscriptions($dbSubscriptions)
 {
     if (!is_array($dbSubscriptions)) {
         $dbSubscriptions = [$dbSubscriptions];
     }
     $result = [];
     foreach ($dbSubscriptions as $dbSubscription) {
         $attributes = $dbSubscription->getAttributes();
         unset($attributes['id']);
         unset($attributes['queue_id']);
         unset($attributes['is_deleted']);
         $subscription = new components\Subscription();
         $subscription->setAttributes($attributes);
         foreach ($dbSubscription->categories as $category) {
             if (!$category->is_exception) {
                 $subscription->categories[] = $category->category;
             } else {
                 $subscription->exceptions[] = $category->category;
             }
         }
         $result[] = $subscription;
     }
     return $result;
 }