Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的缓存?_Php_Mysql_Optimization_Caching - Fatal编程技术网

PHP中的缓存?

PHP中的缓存?,php,mysql,optimization,caching,Php,Mysql,Optimization,Caching,我们运行许多用PHP编写的web应用程序。不幸的是,这些查询中有一些select查询与一些相当大的连接,这导致MySQL的响应性变差 因此,我们正在研究缓存一些常用的联接。我已经研究了Zend_缓存,它看起来很有希望,有没有其他更好的替代方案 另外,缓存的最佳后端是什么?我相信Zend_Cache提供了基于文件的Sqlite和Memcached。您可以将表(在PHP数组中)保存到缓存中,然后稍后轻松地再次检索它。查看。您可以将表(在PHP数组中)保存到缓存中,然后稍后轻松地再次检索它。当速度很重

我们运行许多用PHP编写的web应用程序。不幸的是,这些查询中有一些select查询与一些相当大的连接,这导致MySQL的响应性变差

因此,我们正在研究缓存一些常用的联接。我已经研究了Zend_缓存,它看起来很有希望,有没有其他更好的替代方案


另外,缓存的最佳后端是什么?我相信Zend_Cache提供了基于文件的Sqlite和Memcached。您可以将表(在PHP数组中)保存到缓存中,然后稍后轻松地再次检索它。

查看。您可以将表(在PHP数组中)保存到缓存中,然后稍后轻松地再次检索它。

当速度很重要时,您一定要选择memcached。但在大多数情况下,文件缓存或sqlite缓存满足您的需要


Zend_Cache是一个非常好的缓存库,它通过其适配器系统支持多种缓存机制,这一事实使得以后更改缓存解决方案变得轻而易举,因此我肯定会选择Zend_Cache。

当速度很重要时,你一定应该选择memcached。但在大多数情况下,文件缓存或sqlite缓存满足您的需要


Zend_Cache是一个非常好的缓存库,它通过其适配器系统支持多种缓存机制,这一事实使得以后更改缓存解决方案变得轻而易举,因此我肯定会选择Zend_Cache。

也许您可以先检查MySQL查询缓存是否已打开,如果未打开,请启用它。 这只需要对MySQL进行配置更改,而不必开始重写或向应用程序添加缓存代码

做一些性能测试,如果查询缓存的速度不够快,可以考虑其他建议

有关查询缓存的一些基本信息,请参阅本文:

也许您可以先检查MySQL查询缓存是否已打开,如果未打开,请启用它。 这只需要对MySQL进行配置更改,而不必开始重写或向应用程序添加缓存代码

做一些性能测试,如果查询缓存的速度不够快,可以考虑其他建议

有关查询缓存的一些基本信息,请参阅本文:

在MySQL中打开qcache(查询缓存):

在MySQL中打开qcache(查询缓存):

这实际上取决于是什么原因导致这些查询变慢,以及查询是否再次相同,还是每次都不同

一般来说,我最初会关注查询速度慢的原因,并对其进行改进。数据库内部使用的缓存是高效的,因为相同的缓存项可以由不同的查询使用(假设它们使用相同的数据)

不用担心MySQL查询缓存,最好使用数据库服务器的ram来增加innodb缓冲池(假设您使用的是innodb)。查询缓存的主要困难在于,当表中的一行被修改时,该表的每个条目都会被抛出,即使特定查询的结果没有更改

如果使用不当,查询缓存可能会严重损害性能,但innodb缓冲池通常只对性能有利

如果您的数据不太大,一个廉价且低风险的解决方案是为您的db服务器购买大量ram,并增加innodb缓冲池以超过数据的大小

客户端缓存将更具可扩展性(例如,如果每个web服务器一个缓存),但效率较低,并向应用程序公开过时的数据(当数据过时时,它们可能不会自动过期)


就像任何性能测试一样,测试,测试。使用生产级硬件、生产级数据和工作负载。

这实际上取决于是什么原因导致这些查询变慢,以及查询是否再次相同,或者每次都不同

一般来说,我最初会关注查询速度慢的原因,并对其进行改进。数据库内部使用的缓存是高效的,因为相同的缓存项可以由不同的查询使用(假设它们使用相同的数据)

不用担心MySQL查询缓存,最好使用数据库服务器的ram来增加innodb缓冲池(假设您使用的是innodb)。查询缓存的主要困难在于,当表中的一行被修改时,该表的每个条目都会被抛出,即使特定查询的结果没有更改

如果使用不当,查询缓存可能会严重损害性能,但innodb缓冲池通常只对性能有利

如果您的数据不太大,一个廉价且低风险的解决方案是为您的db服务器购买大量ram,并增加innodb缓冲池以超过数据的大小

客户端缓存将更具可扩展性(例如,如果每个web服务器一个缓存),但效率较低,并向应用程序公开过时的数据(当数据过时时,它们可能不会自动过期)


就像任何性能测试一样,测试,测试。使用生产级硬件、生产级数据和工作负载。

如果您只有一台Web服务器,并且不需要跨多台服务器分发缓存,那么您可以使用APC后端进行Zend_缓存。它比memcached快得多。

如果您只有一个Web服务器,并且不需要跨多个服务器分发缓存,那么您可以使用APC后端进行Zend_缓存。它比memcached快得多。

PEAR的Cache\u-Lite包()是另一个缓存解决方案,您可能还需要对其进行评估。但它只使用基于文件的缓存

当然,您应该分析那些被证明很慢的查询,看看是否可以做任何事情使它们更快。

PEAR的Cache_Lite package()是另一个您可能还需要评估的缓存解决方案。