无论如何,我们有一些非常繁忙的数据库查询,它们在完成后-6ren">
gpt4 book ai didi

asp.net - "Pre-Warming"ASP.NET 缓存的策略

转载 作者:行者123 更新时间:2023-12-02 05:56:30 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 3/.NET Web 应用程序,它很大程度上是数据驱动的,主要围绕“位置”的概念(纽约、加利福尼亚等)。 p>

无论如何,我们有一些非常繁忙的数据库查询,它们在完成后会被缓存。

例如:

public ICollection<Location> FindXForX(string x)
{
var result = _cache.Get(x.ToKey()) as Locaiton; // try cache

if (result == null) {
result = _repo.Get(x.ToKey()); // call db
_cache.Add(x.ToKey(), result); // add to cache
}

return result;
}

但我不希望不幸的第一个用户等待这个数据库调用。

数据库调用可能需要 40-60 秒,远远超过 ASP.NET 请求的默认超时时间。

我想在我的应用程序启动时或启动后不久对某些“热门”位置(例如纽约、加利福尼亚州)进行“预热”这些调用。

我不想简单地在Global asax (Application_Start) 中执行此操作,因为该应用程序的启动时间太长。 (我计划预先缓存大约 15 个位置,因此只需几分钟的时间)。

有什么方法可以异步触发这个逻辑吗?也许侧面的服务是更好的选择?

我能想到的唯一其他选择是拥有一个管理页面,其中包含用于这些操作的按钮。因此,一旦应用程序启动,管理员(例如我)就可以触发这些查询。这将是最简单的解决方案。

有什么建议吗?

最佳答案

快速但肮脏的方法是从 Application_Start 触发 Task

但我发现将此功能包装到一些基础设施中是很好的,这样您就可以创建一个 ~/Admin/CacheInfo 页面来监视进程、状态和可能在处理过程中出现的异常。加载缓存。

关于asp.net - "Pre-Warming"ASP.NET 缓存的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4929528/

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