gpt4 book ai didi

c# - 在没有 Redis 的 Azure 上运行的 ASP.NET Core 应用程序中缓存数据

转载 作者:行者123 更新时间:2023-12-02 06:46:49 25 4
gpt4 key购买 nike

我想在不依赖 Redis 的情况下缓存一些内容。我的应用是在 Azure 应用服务上运行的 ASP.NET Core API 应用。

例如,我创建了一个国家/地区列表

CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);

我可以将其保存在 Redis 中,但这需要花钱,而且这不是一个经常更改的列表,并且是由框架生成的,因此即使我运行 API 应用程序的多个实例,列表也将是相同的。

如何在没有 Redis 的情况下将其保存在内存中?我可以调用在 Startup.cs 中生成此列表的方法,但我应该将其存储在哪里以及如何检索它?

最佳答案

AspNetCore 内置了 memory cache您可以使用它来存储请求之间共享的数据片段。

启动时注册缓存...

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddMvc();
}

public void Configure(IApplicationBuilder app)
{
app.UseMvcWithDefaultRoute();
}
}

你可以像这样注入(inject)它......

public class HomeController : Controller
{
private IMemoryCache _cache;

public HomeController(IMemoryCache memoryCache)
{
_cache = memoryCache;
}

public IActionResult Index()
{
string cultures = _cache[CacheKeys.Cultures] as CultureInfo[];

return View();
}

为了使其在应用程序范围内工作,您可以使用具有强类型成员的外观服务以及某种缓存刷新模式:

  1. 尝试从缓存中获取值
  2. 如果尝试失败
    • 从数据源查找数据
    • 重新填充缓存
  3. 返回值
<小时/>
public CultureInfo[] Cultures { get { return GetCultures(); } }

private CultureInfo[] GetCultures()
{
CultureInfo[] result;

// Look for cache key.
if (!_cache.TryGetValue(CacheKeys.Cultures, out result))
{
// Key not in cache, so get data.
result = CultureInfo.GetCultures(CultureTypes.SpecificCultures);

// Set cache options.
var cacheEntryOptions = new MemoryCacheEntryOptions()
// Keep in cache for this time, reset time if accessed.
.SetSlidingExpiration(TimeSpan.FromMinutes(60));

// Save data in cache.
_cache.Set(CacheKeys.Cultures, result, cacheEntryOptions);
}

return result;
}

当然,您可以通过将其变成一个接受缓存作为依赖项的服务来清理它,您可以将其注入(inject)到任何需要的地方,但这是一般的想法。

另请注意,有一个 distributed cache如果您想在网络服务器之间共享数据。

关于c# - 在没有 Redis 的 Azure 上运行的 ASP.NET Core 应用程序中缓存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48656034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com