我正在运行一个有很多访问的php / mysql驱动的网站,我正在考虑在共享内存中缓存结果集的可能性,以减少数据库负载。
但是,现在MySQL的查询缓存已启用,它似乎做得非常好,因为如果禁用查询缓存,CPU的使用会立即跳转到100%。
鉴于这种情况,我不知道在PHP的共享内存中本地缓存结果集(甚至生成的HTML代码)是否会导致任何明显的性能改进。
有没有人在这方面有任何经验?
PS:请避免建议像memcached这样的重型炮兵解决方案。现在我正在寻找简单的解决方案,不需要太多时间来实现,部署和维护。 修改
我从实际观点看到了关于memcached偏差答案的评论,即在应用程序层缓存数据库查询是否会导致明显的性能影响,因为这些查询的结果已经在数据库级别缓存。
答案 0 :(得分:3)
我知道你不想听到memcached,但它 是你想要做的最好的解决方案之一。根据您的网站使用情况,可以大幅提升性能。通过简单地在我的数据库会话处理程序上使用memcached的会话处理程序,我能够将负载减少一半并减少请求服务时间超过30%。
实际上,memcached是一个简单的解决方案。它已经与PHP集成(如果你加载了扩展名),它几乎不需要配置(我只需要在我的linux盒子上添加memcached作为服务,这是在一个或两个shell命令中完成的)。
我建议在memcache中存储会话数据(以及适合缓存的任何内容)。对于动态页面(例如堆栈溢出主页),我建议缓存输出几秒钟以防止泛滥。
答案 1 :(得分:0)
一个不错的单一框解决方案是基于文件的缓存,但您必须手动扫除它们。除此之外,您可以使用APC,它非常快且在内存中(但仍然必须自己过期)。
但是,只要缩放过一个Web服务器,就需要一个共享缓存,即memcached。你为什么不坚持不部署这个?这并不难,而且只是为了节省你的时间。您现在可以开始使用memcache并使用它完成,或者您现在可以使用上述方法之一,然后最终切换到memcache,从而导致更多的工作。另外,您不必处理运行cronjob或其他丑陋的黑客来获取缓存过期功能:它可以帮助您。
mysql查询缓存很好,但它不是没有issues。其中一个重要因素是每次源数据发生变化时都会自动过期,这可能是您不想要的。