我正在尝试使用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;
}
}
看起来看上去是不是接受选择,或者我错过了什么?
答案 0 :(得分:2)
在更新Predis'zAdd
方法以支持Redis v3.0.2中的更改之前,最好的办法是探索RawCommand
的精彩世界:https://github.com/nrk/predis/blob/master/src/Command/RawCommand.php
它应该让您构建自己的命令,包括ZADD NX ...
变体。