Memcache mutex設計模式

2021-08-30 19:05:41 字數 1054 閱讀 7120

memcache mutex設計模式

monday, jul 26th, 2010 by tim | tags: cache, memcache, memcached, mutex

週六的s2 web 2.0技術沙龍上介紹了memcache中使用mutex場景(文後要演講稿),有網友對詳情感興趣,簡單介紹如下。

場景mutex主要用於有大量併發訪問並存在cache過期的場合,如

•首頁top 10, 由資料庫載入到memcache快取n分鐘

•微博中名人的content cache, 一旦不存在會大量請求不能命中並載入資料庫

•需要執行多個io操作生成的資料存在cache中, 比如查詢db多次

問題解決方法

方法一在load db之前先add乙個mutex key, mutex key add成功之後再去做載入db, 如果add失敗則sleep之後重試讀取原cache資料。為了防止死鎖,mutex key也需要設定過期時間。偽**如下

if (memcache.get(key) == null) else

}方法二

在value內部設定1個超時值(timeout1), timeout1比實際的memcache timeout(timeout2)小。當從cache讀取到timeout1發現它已經過期時候,馬上延長timeout1並重新設定到cache。然後再從資料庫載入資料並設定到cache中。偽**如下

v = memcache.get(key);

if (v == null) else

} else else

}}相對於方案一

優點:避免cache失效時刻大量請求獲取不到mutex並進行sleep

缺點:**複雜性增大,因此一般場合用方案一也已經足夠。

方案二在memcached faq中也有詳細介紹 how to prevent clobbering updates, stampeding requests,並且brad還介紹了用他另外乙個得意的工具 gearman 來實現單例項設定cache的方法,見 cache miss stampedes,不過用gearman來解決就感覺就有點奇技淫巧了。

Memcache mutex設計模式

週六的s2 web 2.0技術沙龍上介紹了memcache中使用mutex場景 文後要演講稿 有對詳情感興趣,簡單介紹如下。mutex主要用於有大量併發訪問並存在cache過期的場合,如 方法一 在load db之前先add乙個mutex key,mutex key add成功之後再去做載入db,如...

設計模式 設計原則與設計模式

一切設計都為了 的可擴充套件性和可讀性,都為了應對變化!我們是基於設計原則的思想,來選擇設計模式去實現,可讀,可擴充套件的目標!核心設計思想 對擴充套件開放,對修改關閉。含義 抽象可變功能,可變功能通過子類擴充套件實現,避免對已有抽象實現的修改。優點 便於擴充套件 核心設計思想 單個方法或單個類或單...

設計模式 設計模式

物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...