Приложение .net 8 с гибридным кэшированием не подключается к RedisC#

Место общения программистов C#
Ответить
Anonymous
 Приложение .net 8 с гибридным кэшированием не подключается к Redis

Сообщение Anonymous »

Я пытаюсь реализовать гибридное кэширование в моем проекте .NET 8, используя Azure Cache для экземпляра Redis. < /p>
Вот что я сделал: < /p>
step 1: < /strong> Я установил пакеты Nuget: < /p>
  • Код: Выделить всё

    microsoft.extensions.caching.hybrid
    {
    options.Configuration = "my-app-name.redis.cache.windows.net:6380,password=my-pass,ssl=True,abortConnect=False";
    options.InstanceName = "my-app-name";
    });
    
    // Commented out to test redis on its own first
    // builder.Services.AddHybridCache(options =>
    // {
    //    options.MaximumPayloadBytes = 1024 * 1024; // 1MB max payload
    //    options.MaximumKeyLength = 1024; // Max key length
    //    options.DefaultEntryOptions = new HybridCacheEntryOptions
    //    {
    //        Expiration = TimeSpan.FromMinutes(30),
    //        LocalCacheExpiration = TimeSpan.FromMinutes(5)
    //    };
    // });
    
    builder.Services.AddControllers();
    // builder.Services.AddScoped();
    builder.Services.AddScoped();
    
    var app = builder.Build();
    
    app.UseHttpsRedirection();
    
    app.UseSwagger();
    app.UseSwaggerUI();
    app.UseHttpsRedirection();
    app.MapControllers();
    
    app.Run();
    
    step 3 : я добавил следующий код службы:

    Код: Выделить всё

    public class RedisCacheService
    {
    private readonly IDistributedCache _redisCache;
    
    public RedisCacheService(IDistributedCache redisCache)
    {
    _redisCache = redisCache;
    }
    
    public async Task FindInCacheAsync(string cacheKey, CancellationToken cancellationToken)
    {
    var cachedValue = await _redisCache.GetStringAsync(cacheKey, cancellationToken);
    
    if (string.IsNullOrEmpty(cachedValue))
    cachedValue = "Not found in cache";
    
    return cachedValue;
    }
    
    public async Task SetCacheAsync(string cacheKey, string value, CancellationToken cancellationToken)
    {
    var options = new DistributedCacheEntryOptions
    {
    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(2)
    };
    
    await _redisCache.SetStringAsync(
    key: cacheKey,
    value: value,
    options: options,
    token: cancellationToken
    );
    }
    }
    
    Шаг 4 : я добавил следующие конечные точки
    [HttpPost]
    public async Task Set(string cacheKey, string value, CancellationToken cancellationToken)
    {
    try
    {
    await _class.SetCacheAsync(cacheKey, value, cancellationToken);
    return Ok("Cache set successfully.");
    }
    catch (Exception ex)
    {
    return BadRequest($"Error setting cache: {ex.Message}");
    }
    }

    [HttpGet("{cacheKey}")]
    public async Task Get(string cacheKey, CancellationToken cancellationToken)
    {
    try
    {
    var cachedValue = await _class.FindInCacheAsync(cacheKey, cancellationToken);
    return Ok(new { Key = cacheKey, Value = cachedValue, Timestamp = DateTime.UtcNow });
    }
    catch (Exception ex)
    {
    return BadRequest($"Error getting cache: {ex.Message}");
    }
    }
    < /code>
    Когда я пытаюсь вызвать API SET, я получаю следующую ошибку: < /p>

    Кэш настройки ошибок: Последствие, выведенное в результате подключения к отставанию. /> Инициализация /независимо, последнее: нет, происхождение: beginconnectasync,
    Выдающийся: 0, последнее чтение: 0s назад, последняя запись: 0S назад, Keep-alive:
    60S, состояние: соединение, MGR: 10 из 10 доступных, последняя сердца:
    никогда не, глобальный: 0s, v: 2.7.27. 5000,
    inst: 0, Q: 7, QS: 0, AW: False, BW: CeckingFortimeout, Last-In: 0,
    cur-in: 0, sync-ops: 0, async-ops: 11, serverendpoint:
    0.0.24.236:6380, conn-sec: n /a, aoc: 0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 1/0, 10, 10. ClientName: Desktop-ABC123 (SE.Redis-V2.7.27.49176), IOCP:
    (Brassion = 0, Free = 1000, Min = 1, макс = 1000), работник:
    (Brouben = 2, бесплатно = 32765, мин = 16, максимум = 32767), бассейн:
    (Threads = 9, queueditems = 0, reflectItems = 376, Timers = 14), V:
    2.7.27.49176 (пожалуйста, посмотрите на эту статью для некоторых общих проблем с клиентом, которые могут вызвать тайм-ауты:
    https://stackexchange.github.io/stacxch ... s/mokeouts. /> < /blockquote>
    Является ли мой метод подключения Redis, и смогу ли я использовать гибридное кэширование в качестве вещей? < /p>

    Подробнее здесь: https://stackoverflow.com/questions/797 ... g-to-redis
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»