public function rpoplpush($destination, int $timeout = -1)
    {
        $destination = ($destination instanceof self) ? $destination->key : $destination;

        if ($timeout >= 0) {
            $ret = $this->redis->brpoplpush($this->key, $destination, $timeout);
        } else {
            $ret = $this->redis->rpoplpush($this->key, $destination);
        }

        return $this->unSerialize($ret);
    }
public function rpoplpush($destination, int $timeout = -1)
    {
        $destination = ($destination instanceof self) ? $destination->key : $destination;

        if ($timeout >= 0) {
            $ret = $this->redis->brpoplpush($this->key, $destination, $timeout);
        } else {
            $ret = $this->redis->rpoplpush($this->key, $destination);
        }

        return $this->unSerialize($ret);
    }
@param RedisList|string $destination Where to push the last element to. Can be key or other RedisList.
Will be inserted at the beginning.

@param int              $timeout     Maximal time in seconds to wait for items to pop. Zero blocks until
something becomes available.
-1 to disable blocking and immediately return null if nothing is available
to pop.

@return mixed The unserialized item or null when the timeout was reached.