6

我刚刚开始使用 Predis 进行 Redis 迁移,但无法让 zadd 函数与数组一起使用。

此代码有效:

foreach ($userIndexArr as $row) {
  $usernames[] = 0;
  $usernames[] = $row['username']; 
  $result = $this->cache->zadd('@person', 0, $row['username']);
}

这不会:

foreach ($userIndexArr as $row) {
  $usernames[] = 0;
  $usernames[] = $row['username']; 
}
try {
    $result = $this->cache->zadd('@person', $usernames);
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}           

并且不会抛出任何错误。任何帮助深表感谢!

-J

4

3 回答 3

5

我玩过这个,如果你正在努力解决这个问题,以下示例肯定会有所帮助(按照redis.io 文档示例):

$predis->zadd( 'myset', [ "one" => 1, "uno" => 1, "two" => 2, "three" => 3 ] )

这将产生与 redis 示例相同的排序集:

ZADD myzset 1 "one"
ZADD myzset 1 "uno"
ZADD myzset 2 "two" 3 "three"

如果您想在 Redis 中的一行中执行此操作,则其中的棘手部分是将分数放在首位,如下所示:

ZADD myzset 1 "one" 1 "uno" 2 "two" 3 "three"

在 Predis 中,这也可以:

$predis->zadd( 'myset', 1, "one", 1, "uno", 2, "two", 3, "three" );
于 2016-05-30T19:55:48.340 回答
3

使用 predis 时,您必须发送成员作为键和分数作为值

$predis->zadd('your:table', array('member' => 'score');

对于 redis文档中的示例,它将是:

$predis->zadd('myzset', array('uno' => 1, 'two' => 2);
于 2017-01-27T10:17:24.287 回答
0

根据以下来源尝试以下操作:https ://github.com/nrk/predis/blob/v1.0/src/Command/ZSetAdd.php

foreach ($userIndexArr as $row) {
    $usernames[$row['username']] = 0; 
}
try {
    $result = $this->cache->zadd('@person', $usernames);
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

不过,未经测试。但我认为它有效,只要你使用 v1.0 =)

于 2014-10-22T20:06:15.763 回答