gpt4 book ai didi

caching - Redis 上的存储列表

转载 作者:可可西里 更新时间:2023-11-01 11:11:40 25 4
gpt4 key购买 nike

我有一个列表,我想把它缓存到redis中。我尝试了两种使用哈希的方法来实现它。

考虑第一种方法。我只创建一个散列并将项目设置为散列值:

// ..

$apiArray = [..]; // array from parsing an api

if(!$c->keys('lista')){
foreach (json_decode($apiArray) as $item){
$c->hset('lista', $item->id, serialize($item));
}
}

foreach ($c->hgetall('lista') as $key){

$item = unserialize($key);

echo '<p>';
echo '<strong>id</strong>: '.$item->id.'<br>';
echo '<strong>name</strong>: '.$item->name.'<br>';
echo '<strong>email</strong>: '.$item->email.'<br>';
echo '</p>';
}

要循环超过 10000 个项目,需要 0.5 秒

现在考虑这个。原始数组的每个元素上的单个哈希:

if(!$c->keys('lista:*')){
foreach (json_decode($apiArray) as $item){
$c->hset('lista:'.$item->id, 'element', serialize($item));
}
}

foreach ($c->keys('lista:*') as $item) {
$item = unserialize($c->hget($item, 'element'));

echo '<p>';
echo '<strong>id</strong>: '.$item->id.'<br>';
echo '<strong>name</strong>: '.$item->name.'<br>';
echo '<strong>email</strong>: '.$item->email.'<br>';
echo '</p>';
}

10000 条记录的循环需要 3 秒

这让我很惊讶,因为第二种是Redis官方文档中介绍的方法,它还支持二级索引(通过使用zadd和sadd)。

为什么比第一种方法最慢?我做错了什么吗?

我认为这可能会发生,因为我必须调用 10000 次 hgetall() 方法才能在循环中获取项目。你能证实这一点吗?

我是否更喜欢第一种方法?

谢谢大家

我:)

最佳答案

第二个代码块较慢的原因是它为循环的每次迭代调用 hget。因此,每次迭代都会与您的 Redis 服务器进行一次网络往返。

相比之下,第一个代码块不会在循环 block 内进行任何网络调用。所以它运行得更快。

关于caching - Redis 上的存储列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981326/

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