2011-10-21 66 views
1

我們正在爲ASP.NET MVC3應用程序使用memcache。爲Web應用程序緩存設計模式

我想知道人們用來管理數據的推薦設計模式或庫,因爲會有這麼多密鑰會生成,因此管理它可能會有點痛苦,並找出哪些數據變得骯髒以及如何處理刷新數據,以便我們在緩存中擁有乾淨的數據副本,並且我們的數據完整性在那裏,並且不會進入髒緩存。

感謝 Saarthak

+0

有多少數據是在緩存中?什麼是緩存的平均大小?多少次讀/寫交易? – sll

+0

我不完全知道,但肯定會碰到幾個100MB。我們還沒有實現緩存,但我們希望遵循行業推薦的做法。我們只是做了一個小實現來獲得Memcache的一個掛件。找到一篇關於此的好文章 - http://www.alachisoft.com/resources/articles/domain-objects-caching-pattern.html 同樣,想知道是否還有其他模式或實踐正在遵循。謝謝 – saarthak

回答

1

我不知道如果我真的讓你的問題,但是這是我用它來管理memcached的接入方式和鑰匙 首先我還想說,這可能不是最好的辦法,因爲我是新來緩存

public class City { String name; } 

public interface CityRepository 
{ 
    City GetCityById(Int32 id); 
} 

public class SqlCityRepository : CityRepository 
{ 
    public City GetCityById(Int32 id) 
    { 
     //SQL CODE 

     return null; 
    } 
} 

public class MemcachedRepository : CityRepository 
{ 
    public CityRepository repository { get; set; } 

    public MemcachedRepository(CityRepository repository) 
    { 
     this.repository = repository; 
    } 

    public City GetCityById(Int32 id) 
    { 
     //IF(CHECK_IF_KEY_IS_PRESENT_AT_MEMCACHED) 
     // RETURN CACHED_VALUE(KEY); 
     //ELSE 
      var result = this.repository.GetCityById(id); 
      //ADD result TO CACHED ITEMS 
      return result; 
    } 
} 

這就是我如何生成我的鑰匙

CLASSNAME + METHODNAME + PARAMS 

這樣,我結束了緩存的方法resultd

+1

除此之外,如果高速緩存中的項比datetime差(interval)更早,則應實施緩存過期策略,您可以使用datetime作爲緩存過期。轉到數據庫,否則將其放置在高速緩存中。從緩存中獲取它。 – DarthVader

+0

你說得對!如果你想單元測試你的緩存過期策略,你可以實現AmbientContext模式,而不是嚴格使用DateTime實現!它適用於我的硬件應用程序..! – renatoargh

+1

Renota,您的答案符合我所尋找的解決方案。但這仍然是一個基本的實現。看看這篇文章 - http://www.alachisoft.com/resources/articles/domain-objects-caching-pattern.html 這傢伙建議一個更好的方式來做事情。所以,我正在尋找一種可能被廣泛使用的解決方案。 – saarthak