es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener el valor del atributo “vary-by” de la etiqueta helper de caché “” desde C#.

Quiero limpiar la memoria caché por una clave específica generada por el ayudante de etiquetas . Es posible borrar toda la memoria caché generada por la etiqueta de caché usando el código siguiente.

“`C#
public partial class MemoryCacheManager : CacheKeyService, ILocker, IStaticCacheManager
{
private readonly CacheTagHelperMemoryCacheFactory _factory;
public MemoryCacheManager(AppSettings appSettings, IMemoryCache memoryCache,
CacheTagHelperMemoryCacheFactory factory) : base(appSettings)
{
_memoryCache = memoryCache;
_factory = factory;
}

<pre><code>public Task ClearAsync()
{
PropertyInfo prop = _factory.Cache.GetType().GetProperty("EntriesCollection", BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Public);
var allInnerCacheTags = prop.GetValue(_factory.Cache) as ICollection;

foreach (var item in allInnerCacheTags)
{
object cacheKeyOfTag = item.GetType().GetProperty("Key", BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Public);
_memoryCache.Remove(cacheKeyOfTag);
}
}
</code></pre>

}
“`

Pero quiero eliminar la entrada de caché por clave específica como se muestra en la imagen adjunta.
Imagen

¿Existe alguna manera de obtener el valor de _varyBy?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible eliminar una entrada de caché mediante una clave específica generada por el ayudante de etiquetas . Puede modificar el método ClearAsync en la clase MemoryCacheManager para aceptar un parámetro para la clave de caché que desea eliminar. Aquí tienes un ejemplo de fragmento de código que puedes agregar a la clase:

    public async Task RemoveAsync(string key)
    {
        // Obtén la entrada de caché de la clave especificada
        var entradaDeCaché = await _memoryCache.GetCacheEntryAsync(key);
    
        if (entradaDeCaché != null)
        {
            // Elimina la entrada de caché
            _memoryCache.Remove(key);
        }
    }
    

    Luego puedes llamar al método RemoveAsync y pasar la clave de caché que deseas eliminar. Si deseas obtener el valor de la propiedad _varyBy, puedes modificar el método RemoveAsync para incluir una verificación del parámetro _varyBy en la clave de caché. Aquí tienes un ejemplo de fragmento de código que puedes agregar a la clase:

    public async Task RemoveAsync(string key)
    {
        // Obtén la entrada de caché de la clave especificada
        var entradaDeCaché = await _memoryCache.GetCacheEntryAsync(key);
    
        if (entradaDeCaché != null)
        {
            // Verifica si la clave de caché tiene un parámetro "_varyBy"
            var índiceDeVaryBy = key.IndexOf("_varyBy");
    
            if (índiceDeVaryBy >= 0)
            {
                // Obtén el valor del parámetro "_varyBy"
                var valorDeVaryBy = key.Substring(índiceDeVaryBy)
                    .Split("_")[1];
    
                // Haz algo con el valor del parámetro "_varyBy"
                // (por ejemplo, regístralo, úsalo para crear una nueva clave de caché, etc.)
            }
    
            // Elimina la entrada de caché
            _memoryCache.Remove(key);
        }
    }
    

    Este fragmento de código verifica si la clave de caché tiene un parámetro _varyBy y luego extrae y usa su valor. Puedes modificar este comportamiento según tus necesidades.

Comments are closed.