2011-07-26 38 views
7

Uygulamamda, istekleri sunmak için Genel işleyici kullandım.Verileri yeniden kullanmak için önbellekte nasıl depolanır?

İlk kez işleyici işleyiciye geldiği gibi bir mekanizma istiyorum, sunucuya bir istekte bulunur ve tüm önbelleği önbelleğe alır, böylece bir sonraki talep edilen ürün kodu önbellek veritabanın içinde mevcutsa, gitmemelidir. Verileri tekrar almak için sunucuya ... sadece veritabanın verilerini kontrol etmelidir.

Öyleyse, önbelleğe nasıl verip verebileceğimi açıklayabilir misiniz?

cevap

21

Something?

public DataTable GetDataTableFromCacheOrDatabase() 
{ 
    DataTable dataTable = HttpContext.Current.Cache["secret key"] as DataTable; 
    if(dataTable == null) 
    { 
     dataTable = GetDataTableFromDatabase(); 
     HttpContext.Current.Cache["secret key"] = dataTable; 
    } 
    return dataTable; 
} 

Veri tablosunu, değiştirirse önbellekten temizlemek için bir mekanizmaya ihtiyacınız olacak. Örneğin bir SqlCacheDependency kullanabilirsiniz.

İstendiği gibi

, tablo yapacağını eklendikten sonra önbelleğe bir saat temizlemek için:

HttpContext.Current.Cache.Insert("secret key", dataTable, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration); 
+2

İplik güvenli değil ... önbellek girişi "if" ile "dönüş" arasında kaldırılırsa ne olur? –

+0

@Thomas Levesque - Bu çok olası değil. – JonH

+2

@JonH, her zaman olağan dışı şeyler olur, eğer olabilirse, muhtemelen er ya da geç (muhtemelen Murphy'nin yasasının arkasındaki fikir) –

1

kullanabilirsiniz: bu satırlar boyunca

HttpContext.Current.Cache["CacheDataTableID"] = datatableInstance; 
4

bu

DataTable mytable; 
String key = "key" 
if(HttpContext.Current.Cache[Key] ==null) 
{ 
     mytable = GetDTFromDB(); 
     if(mytable.Rows.Count > 0) 
      HttpContext.Current.Cache.Insert(strKey, mytable, Nothing, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration); 
    else 
     mytable = HttpContext.Current.Cache[strKey]; 
    } 
0

Eğer

gibi tablo için bir özellik yazabilir deneyin
public DataTable CachedTable { get{ 
     if(Cache["CachedTable"] == null) 
    { 
     Cache["CachedTable"]= //get from databse 
     } 
     return Cache["CachedTable"]; 
    } } 
İlgili konular