2012-12-16 52 views
2

我很努力地找到APC清除舊條目的方式。 特別是用戶條目,我注意到碎片迅速增加到意想不到的水平。APC何時刪除舊條目?

雖然apc.ttl和apc.user_ttl設定在3600,我發現這是沒有得到清除舊條目在APC緩存了很多。我已經反覆增加了APC的內存大小,但它只會在達到100%碎片之前持續更長時間。

那麼,爲什麼會這樣發生?其實我會認爲這是一個在APC中的錯誤,這只是不正常的行爲。我希望有些APC流程會不時清理舊的條目。

而且,可以把它得出這樣的結論,這將是更好地使用另一個緩存系統,PHP,並且只能使用APC作爲碼緩存(其中,缺乏清潔的是少的問題)?

+1

就個人而言,我會用另一種用戶數據緩存機制,並且只能使用APC的指令緩存 - 我還沒有遇到過與APC用戶數據緩存任何問題,但其在需要時分佈式緩存用戶數據,例如內存緩存或Redis的可擴展性提供了 –

+0

所有APC函數都有一個生存時間參數,如果您希望在某個時間之後刪除這些值,您是否應該使用該參數? – adeneo

+1

@adeneo ttl一直在使用,但1天前創建的緩存條目和5分鐘有效的緩存條目現在仍在緩存中。 –

回答

0

如果您想確保刪除舊值。你需要明確地刪除它。

我用APC和memcached的組合在我的應用程序。 APC提供操作碼緩存以及緩存可能保持不變的本地數據(如配置文件)。所有其他對象都使用某種通讀邏輯緩存在memcached中。當我做一個新的版本,我重新啓動APC(通過Apache或者PHP如果一個單獨的進程)(如果數據被更改被清除)

。這將清除APC緩存,配置文件將在稍後重新加載。我將重新啓動memcached,如果對象發生了足夠大的改變,導致加載舊緩存數據時出現問題。

+1

memcached是否實際移除已過期的項目? –

+0

是的,memcached支持1秒到24小時的過期。您將設置您在存儲數據時所需的過期時間。 – datasage

+0

Memcached和APC刪除過期的項目。但只有在需要的時候,也就是沒有更多空間留給新的參賽項目時。這是垃圾收集器。緩存/過期在兩者中的工作方式完全相同。主要區別在於Memcached不會片段化內存。而且兩者的到期時間可以從1秒到幾年,而不是24小時。 – Yvan