2015-07-24 5 views
6

मैं एएसपी.NET 5 और नए .NET कोर के बारे में अधिक जानने की कोशिश कर रहा हूं और अंतर्निहित स्मृति कैश होने पर पता लगाने की कोशिश कर रहा हूं।एएसपी.नेट 5 एमवीसी में कैश तक कैसे पहुंचे?

मुझे माइक्रोसॉफ्ट.फ्रेमवर्क.किंग.मेमरी.मेमरी कैश के बारे में पता चला है। हालांकि बहुत कम दस्तावेज उपलब्ध है।

किसी भी मदद की सराहना की जाएगी। https://github.com/aspnet/Caching/tree/dev/samples/MemoryCacheSample

अधिक नमूने:

उत्तर

14

दो कैशिंग इंटरफेस, IMemoryCache और IDistributedCache रहे हैं। IDistrbutedCache क्लाउड होस्टेड परिदृश्यों में उपयोग करने का इरादा है जहां एक साझा कैश है, जिसे एप्लिकेशन के कई उदाहरणों के बीच साझा किया जाता है। अन्यथा IMemoryCache का उपयोग करें।

आप नीचे दी गई विधि को फोन करके अपने स्टार्टअप में उन्हें जोड़ सकते हैं:

private static void ConfigureCaching(IServiceCollection services) 
{ 
    // Adds a default in-memory implementation of IDistributedCache, which is very fast but 
    // the cache will not be shared between instances of the application. 
    // Also adds IMemoryCache. 
    services.AddCaching(); 

    // Uncomment the following line to use the Redis implementation of  
    // IDistributedCache. This will override any previously registered IDistributedCache 
    // service. Redis is a very fast cache provider and the recommended distributed cache 
    // provider. 
    // services.AddTransient<IDistributedCache, RedisCache>(); 

    // Uncomment the following line to use the Microsoft SQL Server implementation of 
    // IDistributedCache. Note that this would require setting up the session state database. 
    // Redis is the preferred cache implementation but you can use SQL Server if you don't 
    // have an alternative. 
    // services.AddSqlServerCache(o => 
    // { 
    //  o.ConnectionString = 
    //  "Server=.;Database=ASPNET5SessionState;Trusted_Connection=True;"; 
    //  o.SchemaName = "dbo"; 
    //  o.TableName = "Sessions"; 
    // }); 
} 

IDistributedCache है एक ज्यादातर लोगों कैशिंग का अधिकाधिक लाभ उठाने के लिए उपयोग करना चाहते हैं, लेकिन यह एक बहुत ही आदिम इंटरफ़ेस है (आप केवल इसके साथ बाइट सरणी प्राप्त/सहेज सकते हैं) और कुछ एक्सटेंशन विधियां। अधिक जानकारी के लिए this अंक देखें।

अब आप अपने नियंत्रक या सेवा में IDistributedCache या IMemoryCache इंजेक्ट कर सकते हैं और उन्हें सामान्य के रूप में उपयोग कर सकते हैं। उनका उपयोग करना बहुत आसान है, वे सभी के बाद शब्दकोशों की तरह थोड़ा सा हैं। यहां IMemoryCache का एक उदाहरण दिया गया है:

public class MyService : IMyService 
{ 
    private readonly IDatabase database; 
    private readonly IMemoryCache memoryCache; 

    public MyService(IDatabase database, IMemoryCache memoryCache) 
    { 
     this.database = database; 
     this.memoryCache = memoryCache; 
    } 

    public string GetCachedObject() 
    { 
     string cachedObject; 
     if (!this.memoryCache.TryGetValue("Key", out cachedObject)) 
     { 
      cachedObject = this.database.GetObject(); 
      this.memoryCache.Set(
       "Key", 
       cachedObject, 
       new MemoryCacheEntryOptions() 
       { 
        SlidingExpiration = TimeSpan.FromHours(1) 
       }); 
     } 

     return cachedObject; 
    } 
} 
+2

की तलाश में था यह बहुत उपयोगी है, लेकिन मुझे डेटाबेस कैश के बारे में दिलचस्पी नहीं है। मेरे लिए यह बेकार है। यदि डेटा डीबी में पहले ही संग्रहीत है और मैं इसे एक्सेस करने के लिए उच्च लागत का भुगतान कर रहा हूं, तो डीबी में इसे कैशिंग करने का क्या मतलब है! – sam360

+1

मैं सहमत हूं, SQL सर्वर का उपयोग न करें। मेमोरी कैश का उपयोग करना सबसे तेज़ विकल्प है लेकिन क्या होगा यदि आपके पास आपकी साइट के कई उदाहरण हैं? यह वह जगह है जहां रेडिस कैश आता है। रेडिस बहुत तेज़ है और इन उद्देश्यों के लिए। यदि आप '' IDIributributedCache''' का उपयोग करते हैं, तो यदि आप बहुत से उपयोगकर्ताओं को करना आसान है, तो आपकी साइट का एक और उदाहरण चाहते हैं, तो आपकी साइट स्केलेबल हो जाती है। –

+0

एसक्यूएल सर्वर 2016 में अब भी एक इन-मेमोरी मोड है, इसलिए यह बहुत तेज है और अब एक व्यवहार्य कैशिंग विकल्प है। –

संबंधित मुद्दे