.NET CORE с гибридным кэшированием, не подключенным к REDISC#

Место общения программистов C#
Ответить
Anonymous
 .NET CORE с гибридным кэшированием, не подключенным к REDIS

Сообщение Anonymous »

Я пытаюсь реализовать гибридное кэширование в моем проекте .NET Core 8 с использованием Azure Cache для экземпляра Redis
Вот что я сделал:
step 1: Я установил пакеты Nuget:
/> microsoft.extensions.caching.hybrid (версия 9.5.0) < /p>
< /li>
li> microsoft.extensions.caching.stackexchangedis (версия 8.0.16) < /p>
< /br /ri>

/> Шаг 2: < /strong> Я добавил следующие конфигурации в мою программу.var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthorization();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

//MUST be before hybrid to work
builder.Services.AddStackExchangeRedisCache(options =>
{
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>
Шаг 3: Я добавил следующий код службы < /p>
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>
Шаг 4: Я добавил следующие конечные точки < /p>
[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>

Кэш настройки ошибок: Сообщение, приведенное в результате подключения к отставанию
, потому что подключение не стало доступно (5000 мс) - последнее соединение. /> Инициализация /независимо, последнее: нет, происхождение: 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#»