php - 使用 PHP 在 Memcached 中保存从数据库返回的巨大记录

标签 php mysql arrays facebook memcached

我正在开发一个网站(使用 PHP + Memcache),用户可以在其中拥有 friend ,但在考虑保存拥有超过 10 万个 friend 的用户的 friend 列表时遇到了困难。假设,如果用户有 100,000 个 friend ,您将如何将他们保存在 Memcache 中?目前我有这段代码。

$ttl = count($result); //about 10K friends
for($i=0; $i<$ttl; $i++)
{
    $friendslist[$result[$i][0]] = $result[$i]; //$result[$i][0] = Friend's ID
}

$mem->set($usrid,$friendslist);

这会产生很多问题。

1) 首先是保存和检索如此庞大的数组时的内存问题和性能问题。

2) 不能在数组中保存超过 1mb

Einstein 有什么好的技巧可以将这些记录保存在 memcache 中吗?保存和检索此类列表的代码是什么?如果从 DB 返回如此庞大的记录,知道 Twitter 或 Facebook 将如何节省吗?

最佳答案

首先,我建议您不要将这么大的记录保存在单个数组中,而是像分页一样从数据库中调用所需的 friend 列表。但是,如果您仍然需要它,那么我不确定这是否是正确的方法,但您可以尝试一下。

$ttlsets = count($result)/1000; //100K = 100 sets

for($i=0; $i<$ttlsets; $i++)
{
    $friendslist = array();
    for($j=0; $j<100; $j++)
    {
       $friendslist[$result[$i][0]] = $result[$i]; //$result[$i][0] = Friend's ID
    }
    $mem->set($usrid.'set'.$i, $friendslist);
}

$mem->set($usrid.'counter', $ttlsets);

现在您有了一个使用 Sets 的好友列表。你也可以检查你有多少套。现在您可以使用 AJAX 并单独调用每个 Set,一组有 100 个 friend 。所以,现在你不必去数据库。但这同样不是一个完整的证明解决方案,但显示一切正常。

关于php - 使用 PHP 在 Memcached 中保存从数据库返回的巨大记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319737/

相关文章:

php - 内容未发布到数据库但收到成功消息

javascript - Jquery,如何通过属性的第一个位置值选择元素

二维像素数组上的 java.lang.ArrayIndexOutOfBoundsException

c - 指针数组 - 内存分配

PHP如何在url中添加用户id?

php - 使用 PHPExcel 导入时将表列与数据映射

php - Laravel + Doctrine - 通过 ST_DISTANCE 获得最近的地方

mysql - 计算连续天数(连续天数)和当天的记录数

mysql - 连接同一个表的两个查询

java - 如何在 Spring Boot 中使用 hibernate/jpa 将数据插入 mysql 关系表中