2010-05-10 21 views
1

我知道需要像DB_Get_Cached(「sql string」)這樣的函數來散列SQL,以便在memcached中查找數據的存在。memcached - 什麼是緩存常見查詢的好方法,但也處理失效?

function DB_Get_Cached(string SQL) 
data = memcache_get_data(md5(SQL)) 
if (!data) 
    return DB_Get(SQL) 
end if 
end function 

什麼是擴展這個來處理數據失效或超時的好方法?

我在考慮電子商務網站中的產品頁面或用戶個人資料中的用戶詳細信息。

謝謝

+0

你是什麼意思超時? – 2010-05-10 15:36:08

+0

我只是在想,您可能會導致緩存實體在生存時間基礎上失效 – 2010-05-10 15:48:23

回答

2

您可以在密鑰中使用某種全局版本ID。例如,如果您有此鍵代表產品#1234中的數據:

data:products:1234 

添加的版本標識的關鍵是這樣的:

data:1:products:1234 

然後,當你想無效緩存,只需增加版本ID即可。這將導致所有緩存密鑰更改:

data:2:products:1234 
2

不要緩存在查詢函數中,而是緩存處理結果的任何地方。這甚至可以讓你緩存後處理的請求(例如呈現HTML)。

而且,作爲緩存鍵,使用有意義的名稱,如'page:menu'或'user:profile:USERID'。這將允許您輕鬆刪除緩存條目,如果您想使其無效。

相關問題