【问题标题】:Set options for ZADD command in laravel redis在 laravel redis 中设置 ZADD 命令的选项
【发布时间】:2015-06-14 20:36:01
【问题描述】:

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

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

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

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

所以我是这样写的:

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

我得到的错误信息是

PHP 警告:strlen() 期望参数 1 是字符串,给定数组 在 /RediMail/vendor/predis/predis/src/Connection/StreamConnection.php 在第 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 不接受选项,还是我遗漏了什么?

【问题讨论】:

    标签: php laravel redis set


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-22
      • 2020-03-26
      • 2016-01-19
      • 2018-09-30
      • 2021-11-05
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多