2009-10-14 109 views
0

我有一個小部件,將極少更新一些用戶編輯變量(可能只有當用戶設置了小工具)。緩存,避免緩存內容

而不是命中數據庫中,我藉助內存緩存緩存控件用戶變量。小部件內容正在不斷變化。

我有它的設置,以便當用戶創建或編輯它們的小部件時,小部件有一個& noCache參數,它避免緩存的內容並向他們展示最新版本的小部件。

關注的是,用戶要採取小部件變量(包括非緩存),並堅持認爲到頁面的某個地方,從而完全無視緩存。

我想將它檢查用戶的登錄的組件,如果登錄用戶的窗口小部件的所有者相匹配,那麼就不要使用緩存。但是,這意味着每次裝入小部件時都會檢查用戶會話,這可能不是我想要做的。

有關如何有效地做到這一點的任何其他建議?小部件觀衆

99.999999%不會被記錄在,所以我想以最小的開銷增加了這一點。

回答

2

你應該做的是直接設置值到memcached的,你將它們保存到數據庫中。通過這種方式,您可以通過緩存發送所有請求,並且不需要此解決方法。

Update memcache as your data updates在memcached的常見問題

UPDATE

這並不意味着你必須將原始變量存儲到內存緩存。如果您正在存儲呈現的頁面,則通過所有方式再次渲染並將結果存儲到memcache中。如果這太「難」,您可以在同一個頁面中從memcached中刪除舊數據,然後等待下一個請求在緩存中找到它。

+0

我不敢相信我沒有想到!謝謝。 – pedalpete 2009-10-14 22:41:45

+0

哦等等!我不能那樣做。我正在緩存php頁面的結果,正如我在原始問題中提到的那樣,頁面的內容會經常變化(基於傳遞給窗口小部件的變量)。你的解決方案意味着我沒有在php頁面中設置變量,而是在memcache中設置變量。這仍然會減少數據庫負載,但是構建頁面的最快方法是將所有內容都保存在內存緩存中,而不僅僅是變量。 – pedalpete 2009-10-14 22:46:06