Anonymous
Приложение .net 8 с гибридным кэшированием не подключается к Redis
Сообщение
Anonymous » 06 авг 2025, 22:17
Я пытаюсь реализовать гибридное кэширование в моем проекте .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
1754507850
Anonymous
Я пытаюсь реализовать гибридное кэширование в моем проекте .NET 8, используя Azure Cache для экземпляра Redis. < /p> Вот что я сделал: < /p> [b] step 1: < /strong> Я установил пакеты Nuget: < /p> [list] [*][code]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(); [/code] [b] step 3 [/b]: я добавил следующий код службы: [code]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 ); } } [/code] [b] Шаг 4 [/b]: я добавил следующие конечные точки [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/stacxchange.redisustastusts/mokeouts. /> < /blockquote> Является ли мой метод подключения Redis, и смогу ли я использовать гибридное кэширование в качестве вещей? < /p> Подробнее здесь: [url]https://stackoverflow.com/questions/79727129/net-8-app-with-hybrid-caching-is-not-connecting-to-redis[/url]