Вот что я сделал: < /p>
step 1: < /strong> Я установил пакеты Nuget: < /p>
- step 3 : я добавил следующий код службы:
Код: Выделить всё
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();Шаг 4 : я добавил следующие конечные точкиКод: Выделить всё
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 ); } }
[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