Saltar al contenido

¿Cómo usar MemoryCache en la aplicación C# Core Console?

Nuestros mejores desarrolladores agotaron sus depósitos de café, por su búsqueda noche y día por la respuesta, hasta que Alexandría encontró el arreglo en GitLab y en este momento la compartimos contigo.

Solución:

Después de configurar el proveedor, recupere el caché a través del GetService método de extensión

var provider = new ServiceCollection()
                       .AddMemoryCache()
                       .BuildServiceProvider();

//And now?
var cache = provider.GetService();

//...other code removed for brevity;

De los comentarios:

No es necesario usar la inyección de dependencia, lo único que se necesitaba era desechar el valor de retorno de CreateEntry(). La entrada devuelta por CreateEntry necesita ser desechado. Al desecharlo, se agrega a la memoria caché:

using (var entry = cache.CreateEntry("item2"))  
    entry.Value = 2; 
    entry.AbsoluteExpiration = DateTime.UtcNow.AddDays(1); 

IMemoryCache cache = new MemoryCache(new MemoryCacheOptions());
object result = cache.Set("Key", new object());
bool found = cache.TryGetValue("Key", out result);

Vea el ejemplo completo de caché de memoria en GitHub.

Debe agregar paquetes NuGet Microsoft.Extensions.Caching.Memory en su proyecto para usar MemoryCache

Aquí está el código completo de la aplicación de consola en .NET Core

using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Primitives;
using System;

using System.Threading;

namespace InMemoryNetCore

   class Program
  
      static void Main(string[] args)
     
        IMemoryCache cache = new MemoryCache(new MemoryCacheOptions());
        object result;
        string key = "KeyName";
  

        // Create / Overwrite
        result = cache.Set(key, "Testing 1");
        result = cache.Set(key, "Update 1");

        // Retrieve, null if not found
        result = cache.Get(key);
        Console.WriteLine("Output of KeyName Value="+result);

        // Check if Exists
        bool found = cache.TryGetValue(key, out result);

        Console.WriteLine("KeyName Found=" + result);

        // Delete item
        cache.Remove(key);


        //set item with token expiration and callback
        TimeSpan expirationMinutes = System.TimeSpan.FromSeconds(0.1);
        var expirationTime = DateTime.Now.Add(expirationMinutes);
        var expirationToken = new CancellationChangeToken(
            new CancellationTokenSource(TimeSpan.FromMinutes(0.001)).Token);

        // Create cache item which executes call back function
        var cacheEntryOptions = new MemoryCacheEntryOptions()
       // Pin to cache.
       .SetPriority(Microsoft.Extensions.Caching.Memory.CacheItemPriority.Normal)
       // Set the actual expiration time
       .SetAbsoluteExpiration(expirationTime)
       // Force eviction to run
       .AddExpirationToken(expirationToken)
       // Add eviction callback
       .RegisterPostEvictionCallback(callback: CacheItemRemoved);
        //add cache Item with options of callback
        result = cache.Set(key,"Call back cache Item", cacheEntryOptions);


        Console.WriteLine(result);



        Console.ReadKey();

    

    private static void CacheItemRemoved(object key, object value, EvictionReason reason, object state)
    
        Console.WriteLine(key + " " + value + " removed from cache due to:" + reason);
      
   

Fuente: en caché de memoria C# (Explicación con ejemplo en .NET y .NET Core)

Finalizando este artículo puedes encontrar las observaciones de otros sys admins, tú incluso eres capaz dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *