如何使用Memcached加速我的PHP应用程序

时间:2012-03-29 17:19:35

标签: php optimization memcached

我最近一直在网站上工作,想加快我的申请。 我想缓存用户的页面,但页面是动态的,就像有人发布新的Feed一样,然后使用新的Feed更新主页。如果我为一个用户和他的帖子的朋友缓存新主页,我希望该缓存过期,下次再次访问主页时,应用程序会联系数据库并获取新的源并缓存它。

我正在为我的数据库使用memcache和PHP和MySQL。 我有一个名为friendsfeedsusers的表格。

缓存每个用户的朋友是否有效率,当该用户发布Feed时,我的应用会提取他/她的朋友并使用其用户ID缓存通知,以便当这些朋友登录应用时检查每个页面是否存在采取行动的通知(在这种情况下,删除缓存中的主页)。

此致 结果

3 个答案:

答案 0 :(得分:2)

对您的应用程序进行概要分析,并找到您访问提取(或计算)代价高昂的数据的位置。这些地方是开始使用memcached的好地方,除非你进行更多的写入而不是读取(你可能需要更频繁地更新缓存)。

缓存您访问过的所有内容很可能只会产生一个非常完整的memcached,其中主要包含很少访问的数据(同时可能会从实际上缓存的缓存中推出)。在许多情况下,您不应该以密钥值的形式将memcached用作数据库的1:1副本。

答案 1 :(得分:1)

在开始服务器端优化之前,您应该运行ySlow并尝试获得A评级。仔细看看你的JavaScript。如果您正在使用jQuery,那么摆脱它将极大地提高网站的整体性能。前端优化通常更为重要。

下一步是优化清理服务器端代码。尝试测试您的SQL查询qith EXPLAIN。看看你是否遗漏了一些索引。然后使用Xdebug在PHP端进行一些分析。看看瓶颈在哪里。

只有这样才开始搞乱缓存。对于Memcached,除非您的网站运行在服务器集群之上,否则您不需要它。地狱......它甚至可能是有害的。如果您的网站位于单个框中,那么使用APC可以获得更好的结果,与Memcached不同,它本质上不是分布式的。

答案 2 :(得分:0)

编写一个处理所有数据库查询的类,缓存表,并对缓存的表而不是数据库执行查询。每次在表上执行插入或更新时更新缓存。