在 laravel redis 中设置 ZADD 命令的选项

Set options for ZADD command in laravel redis

我正在尝试使用 laravel redis 为 ZADD 设置选项,但失败了。

我需要设置的选项是NX,如文档中所述:

ZADD options (Redis 3.0.2 or greater)

ZADD supports a list of options, specified after the name of the key and before the first score argument.

所以我是这样写的:

$this->redis->zAdd('orderIDs:' . $category, 'NX',[$orderId => $timestamp[1]]);

我得到的错误信息是

PHP warning: strlen() expects parameter 1 to be string, array given in /RediMail/vendor/predis/predis/src/Connection/StreamConnection.php on line 270

我也尝试过使用 put 'NX' 到其他位置,但是 laravel 似乎不喜欢使用 ZADD 选项的想法。

有没有办法用 laravel 做到这一点,或者我是否需要使用另一种方法来设置带有选项的排序集?

我正在使用 Redis 3.0.2。

来自predis/predis:

    class ZSetAdd extends Command
{
    /**
     * {@inheritdoc}
     */
    public function getId()
    {
        return 'ZADD';
    }
    /**
     * {@inheritdoc}
     */
    protected function filterArguments(array $arguments)
    {
        if (count($arguments) === 2 && is_array($arguments[1])) {
            $flattened = array($arguments[0]);
            foreach ($arguments[1] as $member => $score) {
                $flattened[] = $score;
                $flattened[] = $member;
            }
            return $flattened;
        }
        return $arguments;
    }
}

predis 似乎没有接受选项,还是我遗漏了什么?

在 Predis 的 zAdd 方法更新以支持 Redis v3.0.2 中的更改之前,您最好的选择是探索 RawCommand 的精彩世界:https://github.com/nrk/predis/blob/master/src/Command/RawCommand.php

它应该可以让您构建自己的命令,包括 ZADD NX ... 变体。