2012-08-15 33 views
1

我主要想知道訪問APC v。memcached(不是op-code cache)的對象緩存時速度差異是什麼。 memcached的主要優點是它是分佈式的,並不侷限於本地機器。但是,由於它通過網絡,因此存在某種延遲。是否值得在PHP(APC/memcached)中使用分步緩存?

我想知道訪問APC(在機器上)和memcached(在另一個服務器上)之間的速度差是否足夠大,以保證有一個分步緩存方案,程序首先嚐試APC,然後是memcached,最後是數據庫,如果一切都失敗。

回答

1

像大多數其他所有:它取決於。

如果你有很多的計算,並可以存儲結果,然後緩存將加快速度。如果你只是基本上存儲數據庫中的行,那麼在內存緩存中會有所幫助,但memcached可能不會增加與數據庫相比的巨大差異(假設db查詢都很簡單)。另一方面,如果你正在做複雜的查詢,或者大量的編程工作來創建一些東西,那麼緩存就更有意義了。

舉一個例子,我最近在一個由第三方承包商編寫的網站上工作,該承包商在設計期間沒有做任何表演工作。它像牛一樣緩慢,因爲它有很多未優化的包括等等。添加APC基本上將性能提高了10倍。添加memached減少10 - 20毫秒的加載時間。

如果你足夠遠,然後做一些性能測試(查找xdebug,或其他工具),看看你的瓶頸在哪裏,然後相應的計劃。

0

請記住,如果您用其他東西填滿APC緩存,APC將不得不重新計算您的頁面的操作碼。如果頁面繼續移除對象,這可能會導致問題,然後一旦頁面運行對象,將繼續移除頁面。不好玩。

只是安全起見,不要試圖將APC用於除配置值之外的其他任何內容,這些值不會導致您的頁面被刪除以騰出空間。

TL; DR一旦APC變滿,您的網站就會變慢,您的服務器將工作得更加困難。

+0

APC使用兩個單獨的緩存:apc_cache和apc_user_cache。前者用於操作碼,後者用於用戶存儲的對象。他們幾乎是分開的。 – parent5446 2012-08-15 18:30:58

+0

@ parent5446,但我很確定他們共享相同的內存,如果需要,可以從其他人那裏獲取。 – Xeoncross 2012-08-15 18:58:11