【问题标题】:Predis - how to use array with zadd function?Predis - 如何使用带有 zadd 函数的数组?
【发布时间】:2014-12-16 02:38:05
【问题描述】:

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

【问题讨论】:

    标签: php caching redis predis


    【解决方案1】:

    我玩过这个,如果你正在努力解决这个问题,下面的例子肯定会有所帮助(遵循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" );
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        在下面尝试,根据此来源: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 =)

        【讨论】:

        • 我试过这个,但没有运气。仍在 for 循环中使用 zadd。有没有办法使用 execute raw 来做到这一点?
        • 检查您的 Predis 版本,同时在 redis-cli 中发出 MONITOR 以检查您的代码正在发送的当前命令是什么。
        • 那么,您是否检查了监控命令以查看正在输出的内容?另外请告诉我你的 Predis 版本。
        • 您好,很抱歉回复晚了。有一些解决方法,所以不得不继续前进。按原样尝试您的代码,它就像一个魅力。非常感谢!
        猜你喜欢
        • 2015-08-29
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 2017-04-29
        • 2017-07-23
        相关资源
        最近更新 更多