2012-09-11 49 views
1

假設我有一些緩存了30秒的東西,產生緩存的數據庫請求需要2s,我每秒獲得100個請求,緩存需要刷新時會發生什麼?Memcache配置過期時間

我懷疑我的db命中了200次。我想要發生的是讓第一個通過,但然後告訴其他人回到緩存,所以基本上在30秒後第一次嘗試緩存時沒有說什麼,但是剩下的部分會在之前得到以前的內容通過更新它的人。

我是否必須在應用程序級別上執行此操作,或者可以將memcache配置爲執行此操作?

回答

1

您將需要在您的應用程序中構建此邏輯。當在memcached中找不到該項目時,只需從數據庫中取回該項目,然後在緩存中創建一個新項目。項目過期後,您需要重新緩存數據庫中的項目。

[ get item from cache ] ----- yes 
    |       | 
    no      [ return item ] 
    | 
    | 
[ get item from database ] -- yes 
    |       | 
    no      [ store item in cache ] 
    |       | 
[ return not found ]  [ return item ] 
+1

噓!我剛剛進行了臺式測試,並且可以在緩存命中之間看到大量的db命中。我在應用程序中處理它的方式是有兩種緩存 - 一種是30秒,一種是60秒。如果三十分鐘內沒有命中,可以打到db並提高'命中60'的標誌。當數據庫返回刷新30和60緩存和更低的標誌。假設沒有數據庫請求不超過30秒,應該只在緩存之間命中一次。如果你可以配置memcache的生命週期就意味着在x秒內不返回任何東西,那將會很好。 –