php - 在不检索列表的情况下检查键是否存在于 Redis 列表中

标签 php redis pipeline

我正在为 PHP 使用 Redis。

我需要检查该键是否存在于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);
        }
    });

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

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

最佳答案

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

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

关于php - 在不检索列表的情况下检查键是否存在于 Redis 列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48206060/

相关文章:

azure - 有没有办法在管道之间创建依赖关系? (单个管道依赖于其他 3 个管道)

PHP Redis 管道 lRange 无法正常工作

php - Laravel 5.2 按距用户邮政编码的距离搜索用户

php - 按小时获取统计数据,限制为最近 6 小时

使用 HTML 变量进行 PHP 分页

c# - 如何将 ASP.NET Core 应用程序和 Redis 一起 dockerize?

ruby-on-rails - Ruby 救援没有捕捉到 StandardError

php - 如何在 Wordpress 日期函数中为月份和年份的样式提供单独的类?

c# - Windows 本地主机上的 Redis 性能

python - 对流水线中的同一个估计器使用不同的特征