Memcache針對不同場景數據應用緩存策略

Memcache主要的作用是爲減輕大訪問量對數據庫的衝擊,所以一般的邏輯是首先從memcache中讀取數據,如果沒有就從數據庫中讀取數據寫入到memcache中,等下一次讀取的時候就可以從memcache中讀取了。但在項目中的具體應用策略(也就是哪些數據應該緩存?怎麼樣緩存?過期策略?)就是個問題了。它的一個總原則是將經常需要從數據庫讀取的數據緩存在memcache中。這些數據也分爲幾類:
一、經常被讀取並且實時性要求不強可以等到自動過期的數據。例如網站首頁最新文章列表、某某排行等數據。也就是雖然新數據產生了,但對用戶體驗不會產生任何影響的場景。
這類數據就使用典型的緩存策略,設置一過合理的過期時間,當數據過期以後再從數據庫中讀取。當然你得制定一個緩存清除策略,便於編輯或者其它人員能馬上看到效果。
二、經常被讀取並且實時性要求強的數據。比如用戶的好友列表,用戶文章列表,用戶閱讀記錄等。
這類數據首先被載入到memcache中,當發生更改(添加、修改、刪除)時就清除緩存。在緩存的時候,我將查詢的SQL語句md5()得到它的hash值作爲key,結果數組作爲值寫入memcache,並且將該SQL涉及的table_name以及hash值配對存入memcache中。當更改了這個表時,我就將與此表相配對的key的緩存全部刪除。
三、統計類緩存,比如文章瀏覽數、網站PV等
此類緩存是將在數據庫累加的數據放在memcache來累加。獲取也通過memcache來獲取。但這樣就產生了一個問題,如果memcache服務器down掉的話這些數據就有可能丟失,所以一般使用memcache永久性存儲,這方面新浪使用memcachedb。
四、活躍用戶的基本信息或者某篇熱門文章。
此類數據的一個特點就是數據都是一行,也就是一個一維數組,當數據被update時(比如修改暱稱、文章的評論數),在更改數據庫數據的同時,使用Memcache::replace替換掉緩存裏的數據。這樣就有效了避免了再次查詢數據庫。
五、session數據
使用memcache來存儲session的效率是最高的。memcache本身也是非常穩定的,不太用擔心它會突然down掉引起session數據的丟失,即使丟失就重新登錄了,也沒啥。

注:Memcache作爲緩存服務器,其PHP插件分爲memcache和memcached兩種,區別不大,應用一種即可。

發佈了15 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章