用PHP在Memcache中保存数据库返回的巨大记录
我正在开发一个网站(使用PHP+Memcache),在这个网站上,用户可以有朋友,并且在考虑保存一个拥有超过10万个朋友的用户的朋友列表时陷入了困境。假设,若用户有10万个朋友,你们将如何将他们保存在Memcache中?目前我有这个代码用PHP在Memcache中保存数据库返回的巨大记录,php,mysql,arrays,facebook,memcached,Php,Mysql,Arrays,Facebook,Memcached,我正在开发一个网站(使用PHP+Memcache),在这个网站上,用户可以有朋友,并且在考虑保存一个拥有超过10万个朋友的用户的朋友列表时陷入了困境。假设,若用户有10万个朋友,你们将如何将他们保存在Memcache中?目前我有这个代码 $ttl = count($result); //about 10K friends for($i=0; $i<$ttl; $i++) { $friendslist[$result[$i][0]] = $result[$i]; //$result[
$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);
$ttl=count($result)//大约一万个朋友
对于($i=0;$i首先,我建议您不要将如此庞大的记录保存在单个数组中,而是像分页一样从数据库调用所需的朋友列表。但如果您仍然需要它,那么我不确定这是否是正确的方法,但您可以尝试一下
$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);
$ttlsets=count($result)/1000;//100K=100套
对于($i=0;$i为什么你不只是一次添加或删除一个朋友。用户是否真的需要将十万个全新ID作为朋友粘贴到一个请求中?为什么你需要在memecahce中存储这么多朋友?这似乎不是一个合适的解决方案。正如其他人所说,这似乎是一个问题。为什么o您需要存储用户的所有朋友?您永远不需要一次加载所有10万个朋友。您需要按照Facebook的做法做一些事情,即延迟加载他们(例如使用JavaScript)随需应变。问题是,当用户检查他的朋友列表时,如果我不将列表保存在Memcache中,我就必须从DB中获取列表,这就是问题所在。这就是我一直在寻找的。我尝试了一下,效果很好。虽然我不得不为AJAX编写一些其他代码,但Memcache集很棒