2011-09-26 184 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使用一些複雜的緩存引擎。