检查Redis列表中是否存在密钥而不检索列表

时间:2018-01-11 11:32:42

标签: php redis pipeline

我正在使用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

1 个答案:

答案 0 :(得分:3)

错误回答:您可以拨打LINDEX而不是在客户端进行搜索。

Righter回答:扫描链表始终是一项昂贵的操作(O(N)),无论是服务器端还是客户端。考虑使用不同的数据结构,例如如果您的N很大,则为此目的设置。