gpt4 book ai didi

redis - 使用 phpredis 扫描命令性能

转载 作者:IT王子 更新时间:2023-10-29 06:03:22 25 4
gpt4 key购买 nike

我正在使用 phpredis 将 KEYS 替换为 SCAN。

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
$it = NULL;
while($arr_keys = $redis->scan($it, "mykey:*", 10000)) {
foreach($arr_keys as $str_key) {
echo "Here is a key: $str_key\n";
}
}

根据 redis documentation ,我使用 SCAN 对搜索进行分页以避免使用 KEYS 的缺点。
但在实践中,使用上面的代码比使用单个 $redis->keys()
成本低 3 倍所以我在想是不是我哪里做错了,还是要付出speed才能避免KEYS的威胁?

请注意,我的数据库中总共有 400K+ 个 key ,以及 4 个 mykey:* key

最佳答案

使用示例的注意事项:

$it = NULL;
while($arr_keys = $redis->scan($it, "mykey:*", 10000)) {
foreach($arr_keys as $str_key) {
echo "Here is a key: $str_key\n";
}
}

如果扫描的 10000 个键中没有一个匹配,它可以返回空数组,然后它会放弃,并且您没有得到您想要的所有键!我建议做更多这样的事情:

$it = null;
do
{
$arr_keys = $redis->scan($it, $key, 10000);
if (is_array($arr_keys) && !empty($arr_keys))
{
foreach ($arr_keys as $str_key)
{
echo "Here is a key: $str_key\n";
}
}
} while ($arr_keys !== false);

以及为什么需要这么长时间,400k+ 键,10000,也就是 40 个对 redis 的扫描请求,如果它不在本地机器上,每 40 个 redis 查询增加延迟以提高您的速度。

关于redis - 使用 phpredis 扫描命令性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38892411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com