【问题标题】:Check if the key exists in the Redis list without retrieving the list检查 key 是否存在于 Redis 列表中而不检索列表
【发布时间】:2018-01-14 01:34:31
【问题描述】:

我正在使用 Redis for PHP。

我需要检查该键是否存在于redis列表中,如果不存在,则添加它。现在我的代码如下所示:

$redis = Redis::connection();
$redis->pipeline(function($pipe)  use ($type, $redis)
    {
        $list = $pipe->lRange($type.'_unique_list', 0, -1);
        if(!in_array($this->uid, $list)) {
            $pipe->rPush($type . '_unique_list', $this->uid);
        }
    });

问题是$list取自$pipe返回Redis对象,而不是数组,in_array不起作用。但是如果我使用$redis->lRange,脚本就会变得太慢。

所以我的问题是,是否有可能检查密钥是否存在于 Redis 列表中而不检索列表到脚本中?一些我在文档中找不到的特殊 Redis 命令?或者我可以在这种特殊情况下用其他东西替换in_array

【问题讨论】:

  • $list 是对象还是对象数组?指定。更好地展示var_dump($list);

标签: php redis pipeline


【解决方案1】:

错误答案:您可以致电LINDEX 而不是在客户端中进行搜索。

更正确的答案:无论是服务器端还是客户端,扫描链表始终是一项昂贵的操作 (O(N))。考虑使用不同的数据结构,例如一个集合,如果你的 N 很大的话。

【讨论】:

  • 是的,我已经发现它并且刚刚开始创建和检查单独的小键。尤其是正确的想法,因为我必须偶尔刷新这个列表,而密钥会自动过期。
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2021-06-02
  • 2013-03-19
相关资源
最近更新 更多