我正在使用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
?
答案 0 :(得分:3)
错误回答:您可以拨打LINDEX
而不是在客户端进行搜索。
Righter回答:扫描链表始终是一项昂贵的操作(O(N)),无论是服务器端还是客户端。考虑使用不同的数据结构,例如如果您的N很大,则为此目的设置。