2011-09-26 55 views
0

我一直在寻找这样的:尽量减少与高速缓存数据库的交互

http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

它的缓存东西,一个惊人的方式,但它发生在数据库端,这将是巨大的,如果有某种代码对于PHP来说,它会为你做同样的事情。

我的意思是你会发送你的查询到中间层,它会看你的查询,决定是否需要再次连接到数据库。

有没有人为PHP做过类似的事情?你认为这是一个好主意吗?

+4

大多数人会使用[memcached](http://memcached.org/) –

+0

有多个php缓存脚本。 – 2011-09-26 21:41:06

+0

理想情况下,脚本应连接到数据库一次,执行尽可能多的查询,然后关闭每个服务页面的连接,这样就不需要连接所有时间。你可能想考虑['mysql_pconnect()'](http://php.net/manual/en/function.mysql-pconnect.php),尽管我不会亲自使用它。 – Bojangles

回答

0

我写了一篇博客文章,内容涉及这个主题的大量细节http://www.joeyrivera.com/2009/caching-using-phpzend_cache-and-mysql/。它讨论了为什么要缓存以及如何使用zend缓存实现缓存。与数据库通信通常很慢,因此您应该尽可能地缓存数据。缓存到ram将为您带来更好的性能结果,因为ram比使用memcache之类的文件系统更快,但是如果您没有可用的文件系统,则只需使用文件系统缓存即可。

0

对于任何缓存,实际缓存和失效都由同一个应用程序(例如sql-server)完成很重要。
尽管编写某些客户端查询缓存可能并不困难,但在大多数情况下,这绝对没有意义,因为当缓存的数据过期时,客户端缓存不会被通知(由sql服务器)。但实际上查询缓存就是你所建议的那个层。
由于mysql的查询缓存不知道任何有关您的应用程序逻辑的信息,因此必须通过其他条件(例如更改表)来使缓存失效。如果用作唯一的缓存,这可能会导致性能较差(特别是在快速更改的表上)。
因此,您应该在您的客户端上针对您的应用程序logik使用一些复杂的缓存引擎。