代码之家  ›  专栏  ›  技术社区  ›  GetFree

mysql查询缓存与应用层缓存结果集

  •  2
  • GetFree  · 技术社区  · 14 年前

    我正在运行一个PHP/MySQL驱动的网站,有很多访问,我正在考虑将结果集缓存到共享内存中以减少数据库负载的可能性。
    但是,现在MySQL的查询缓存已经启用了,而且它似乎做得很好,因为如果禁用查询缓存,CPU的使用会立即跳到100%。
    在这种情况下,我不知道在本地与PHP共享内存中缓存结果集(甚至生成的HTML代码)是否会导致显著的性能改进。

    有人在这件事上有经验吗?

    附言:请避免建议像memcached这样的重型火炮解决方案。现在,我正在寻找简单的解决方案,不需要太多时间来实现、部署和维护。

    编辑:
    我看到我对memcached的评论偏离了实际的答案,也就是说,考虑到这些查询的结果已经在db级别缓存,在应用程序层缓存db查询是否会导致显著的性能影响。

    2 回复  |  直到 8 年前
        1
  •  3
  •   Kenaniah    14 年前

    我知道你不想听Memcached,但是 最好的解决方案之一。根据您的网站使用情况,性能可能会有很大的改进。通过在数据库会话处理程序上简单地使用memcached的会话处理程序,我可以将负载减少一半,并将请求服务时间减少30%以上。

    实际上,memcached是一个简单的解决方案。它已经与PHP集成(如果您已经加载了扩展名),而且几乎不需要配置(我只需要在Linux设备上添加memcached作为服务,这在一个或两个shell命令中完成)。

    我建议在memcache中存储会话数据(以及任何有助于缓存的内容)。对于动态页面(如堆栈溢出主页),我建议缓存输出几秒钟以防止溢出。

        2
  •  0
  •   ryeguy    14 年前

    一个不错的单盒解决方案是基于文件的缓存,但是您必须手动清除它们。除此之外,您还可以使用APC,这是非常快的,在内存中(但仍然需要自己终止它们)。

    但是,一旦扩展到一个Web服务器之后,就需要一个共享缓存,即memcached。为什么你这么坚决不部署这个?这并不难,它只是在路上为你节省时间。您可以现在就开始使用memcache并完成它,或者现在就使用上面的方法之一,然后无论如何都会切换到memcache,从而产生更多的工作。另外,您不必处理运行cronjob或其他一些丑陋的黑客程序来获取缓存过期特性:它为您做到了这一点。

    MySQL查询缓存很好,但它也有 issues . 其中一个重要的问题是,每次源数据更改时,它都会自动过期,而这可能是您不想要的。