2015-07-24 8 views
6

Ich versuche, mehr über ASP.NET 5 und neue .NET Core zu lernen und herauszufinden, ob es einen eingebauten Speichercache gibt.Zugriff auf Cache in ASP.NET 5 MVC?

Ich habe über Microsoft.Framework.Caching.Memory.MemoryCache herausgefunden. Allerdings gibt es sehr wenig Dokumentation zur Verfügung.

Jede Hilfe wäre willkommen.

Antwort

14

Es gibt zwei Caching-Schnittstellen, IMemoryCache und IDistributedCache. Die Datei IDistrbutedCache ist für die Verwendung in Cloud-gehosteten Szenarios vorgesehen, in denen ein gemeinsamer Cache vorhanden ist, der von mehreren Instanzen der Anwendung gemeinsam genutzt wird. Verwenden Sie andernfalls die IMemoryCache.

Sie können sie in Ihrem Autostart hinzufügen, indem Sie die Methode unter Aufruf:

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"; 
    // }); 
} 

Die IDistributedCache ist die eine die meisten Menschen das Beste aus Caching verwenden möchten, bekommen, aber es hat eine sehr primitive Schnittstelle (Sie können nur Byte-Arrays mit ihm erhalten und speichern und nur wenige Erweiterungsmethoden. Weitere Informationen finden Sie unter this.

Sie können entweder IDistributedCache oder IMemoryCache in Ihre Steuerung oder Ihren Service injizieren und sie wie gewohnt verwenden. Sie zu benutzen ist ziemlich einfach, sie sind ein bisschen wie Wörterbücher. Hier ein Beispiel für die 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

gesucht hat. Das ist sehr hilfreich, aber ich bin nicht so interessiert an Datenbank-Cache. Für mich ist es nutzlos. Wenn die Daten bereits in der Datenbank gespeichert sind und ich die hohen Kosten für den Zugriff auf die Daten bezahle, was ist der Zweck der Zwischenspeicherung in DB? – sam360

+1

Ich stimme zu, verwenden Sie nicht SQL Server. Die Verwendung des Speichercaches ist die schnellste Option, aber was ist, wenn Sie mehrere Instanzen Ihrer Site haben? Hier kommt der Redis Cache ins Spiel. Redis ist sehr schnell und genau für diese Zwecke. Wenn Sie '' IDistributedCache''' verwenden, dann ist Ihre Site skalierbar, wenn Sie möchten, dass eine andere Instanz Ihrer Site aufgrund der vielen Benutzer leicht gemacht werden kann. –

+0

SQL Server 2016 verfügt nun auch über einen In-Memory-Modus, sodass es viel schneller ist und jetzt eine brauchbare Caching-Option bietet. –