Predis - 如何使用zadd函数的数组?

时间:2014-10-21 00:23:31

标签: php caching redis predis

我刚开始使用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

3 个答案:

答案 0 :(得分:2)

我玩弄了这个,如果你正在努力解决这个问题,下面的例子肯定有帮助(按照redis.io documents示例):

$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" );

答案 1 :(得分:1)

使用predis时,您必须将成员作为密钥发送,将分数作为值

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

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

$predis->zadd('myzset', array('uno' => 1, 'two' => 2);

答案 2 :(得分: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 =)