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.

Configurar el tiempo de expiración de la clave SignalR al utilizar el Backplane de Redis en un conjunto de servidores.

Tengo una granja de servidores con 2 servidores y una aplicación desarrollada en ASP.NET Core 3.1 que utiliza SignalR. Tuve problemas con las señales, así que implementé el buscador de Redis y ahora todo funciona bien. Este es el código de Startup.cs:

services.AddDistributedRedisCache(option =>
{
  option.Configuration = "127.0.0.1:6379";
  option.InstanceName = "InstanceName";
});

services.AddSignalR(o =>
{
   o.EnableDetailedErrors = true;
}).AddStackExchangeRedis("127.0.0.1:6379");

El problema aquí es que las claves que se registran en el servidor de Redis no tienen tiempo de expiración y permanecerán allí para siempre. Ejemplo:

¿Hay alguna forma de establecer el tiempo de expiración para estas claves? ¿O tal vez hay alguna configuración predeterminada que esté gestionando estas claves?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en ASP.NET Core, Redis y SignalR, recomiendo utilizar el método SetOptions de la interfaz IDistributedCache para establecer un tiempo de expiración para las claves almacenadas en Redis.

    En tu archivo Startup.cs, agrega la siguiente línea de código para establecer el tiempo de expiración de los elementos en caché:

    services.AddDistributedRedisCache(options =>
    {
        options.Configuration = "127.0.0.1:6379";
        options.InstanceName = "InstanceName";
        options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions
        {
            AbortOnConnectFail = false,
            Ssl = false,
            ConnectTimeout = 5000,
            SyncTimeout = 5000,
            EndPoints = { "127.0.0.1:6379" }
        };
        options.DefaultSlidingExpiration = TimeSpan.FromSeconds(60); // Establece el tiempo de expiración en 60 segundos
    });
    

    Al establecer la propiedad DefaultSlidingExpiration del parámetro options, puedes especificar la cantidad de tiempo que Redis mantendrá los datos antes de expirarlos. En este ejemplo, el tiempo de expiración se establece en 60 segundos.

    También puedes utilizar el método SetOptions de la interfaz IDistributedCache para establecer diferentes tiempos de expiración para diferentes elementos. Por ejemplo, el siguiente código establece un tiempo de expiración de 10 segundos para el elemento myKey:

    var cacheEntryOptions = new DistributedCacheEntryOptions()
        .SetSlidingExpiration(TimeSpan.FromSeconds(10));
    
    await _distributedCache.SetStringAsync("myKey", "myValue", cacheEntryOptions);
    

    En general, establecer un tiempo de expiración para los elementos en caché en Redis es importante para evitar la acumulación de datos innecesarios y mejorar el rendimiento.

Comments are closed.