【发布时间】:2010-12-09 13:58:37
【问题描述】:
我有一个拥有 250K DAU 的 Facebook 应用程序。我使用 Memcached 缓存文件和 MySql 选择,因为没有它我的服务器会发疯。
我已经设置了这样的代码:
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
// 用于文件
$doc = $memcache->get('mem_index_html');
if ($doc == null)
{
$doc = new Document( HTML.'index.html' );
$memcache->set('mem_index_html', $doc, 0, 86400);
}
// FOR SQL
$sql=sprintf('count(qtn_id) FROM tb_questions where qtn_lang="EN"));
$total_pages = $memcache->get($sql);
if ($total_pages == null)
{
$query_id = DB::query($sql);
list( $total_pages ) = DB::nextRow( $query_id );
DB::free( $query_id );
$memcache->set($sql, $total_pages, 0, 86400);
}
问题在于,经过一段时间(通常是 24 小时)后,错误开始出现。没有创建日志,但如果我尝试重新加载页面,我会收到超时。我假设当时有很多流量,Memcached 工作不正常,一切都在变慢。
我的临时解决方案是刷新内存缓存 - $memcache->flush(),,但这不是一个好的解决方案。
我做错了吗?有什么要优化的还是我不知道。我发现通过网络搜索这个http://code.google.com/p/memcached/wiki/TutorialCachingStory 关于制作更多的 Memecached 服务器。这是最好的解决方案吗?
感谢您的回答。
达科
【问题讨论】:
-
暂时的并不意味着暂时的。这意味着与时间有关。同根不同义。