Я пытаюсь реализовать гибридное кэширование в моем проекте .net Core 8, используя Azure Cache для экземпляра Redis
Вот что я сделал:
Шаг 1: Я установил пакеты Nuget:
1- Microsoft.ext. 9.5.0)
2- microsoft.extensions.caching.stackexchangantis (версия 8.0.16)
Шаг 2: Я добавил следующие конфигурации в мою программу.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:1234,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
.NET CORE с гибридным кэшированием, не подключенным к REDIS ⇐ C#
Место общения программистов C#
-
Anonymous
1754474461
Anonymous
Я пытаюсь реализовать гибридное кэширование в моем проекте .net Core 8, используя Azure Cache для экземпляра Redis
Вот что я сделал:
[b] Шаг 1: [/b] Я установил пакеты Nuget:
1- Microsoft.ext. 9.5.0)
2- microsoft.extensions.caching.stackexchangantis (версия 8.0.16)
[b] Шаг 2: [/b] Я добавил следующие конфигурации в мою программу.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:1234,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/stacxchange.redisustastusts/mokeouts. /> < /blockquote>
Является ли мой метод подключения Redis, и смогу ли я использовать гибридное кэширование в качестве вещей? < /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/79727129/net-core-with-hybrid-caching-not-connecting-to-redis[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия