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

时间:2015-06-14 20:36:02

标签: php laravel redis set

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

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

  

ZADD选项(Redis 3.0.2或更高版本)

     

ZADD支持一个选项列表,在键名和第一个得分参数之前指定。

所以我这样写了:

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

我收到的错误消息是

  

PHP警告:strlen()期望参数1为字符串,给定数组   在/RediMail/vendor/predis/predis/src/Connection/StreamConnection.php中   在第270行

我也尝试将'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;
    }
}

看起来看上去是不是接受选择,或者我错过了什么?

1 个答案:

答案 0 :(得分:2)

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

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