Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC5中管理缓存回调_C#_Asp.net Mvc_Caching - Fatal编程技术网

C# 在MVC5中管理缓存回调

C# 在MVC5中管理缓存回调,c#,asp.net-mvc,caching,C#,Asp.net Mvc,Caching,我使用的是.NET4.6.2,MVC5。缓存正在使用。我将缓存完全写在一个控制器中,并完成项删除回调,但我记得控制器是在请求范围中创建的。我假设这意味着我的回调不会触发,因为此时控制器已被释放 处理这个问题的最佳方法是什么?我知道我可以从控制器查询缓存,这不是问题,但我的问题是我应该如何使用回调处理缓存 我唯一能想到的就是在后台运行的单例服务来管理缓存。这意味着我可以将它注入应用程序_Start并处理初始化,但我总是担心使用单例 我应该如何处理MVC5中的缓存回调?在我看来,它不会在控制器内工作

我使用的是.NET4.6.2,MVC5。缓存正在使用。我将缓存完全写在一个控制器中,并完成项删除回调,但我记得控制器是在请求范围中创建的。我假设这意味着我的回调不会触发,因为此时控制器已被释放

处理这个问题的最佳方法是什么?我知道我可以从控制器查询缓存,这不是问题,但我的问题是我应该如何使用回调处理缓存

我唯一能想到的就是在后台运行的单例服务来管理缓存。这意味着我可以将它注入
应用程序_Start
并处理初始化,但我总是担心使用单例


我应该如何处理MVC5中的缓存回调?在我看来,它不会在控制器内工作,因为控制器是根据请求创建的。

我最终使用了一种稍微不同的方法。缓存仍然在控制器中处理,但我消除了回调。控制器尝试访问缓存数据,如果缓存数据不存在,则重新填充。这解决了我提出的问题,同时仍然能够利用缓存。

您在这里真正想要实现的是什么?你为什么需要“回调”?FWIW,MemoryCache是进程绑定的,所以只要你的应用程序池或单个web工作人员这样做,它就会一直挂起(每个工作人员都是一个单独的进程)。因此,是的,虽然控制器是请求范围的,但缓存仍可能在许多请求中存活。如果您只是想增加缓存的稳定性,那么最好考虑使用Redis。使用Redis的分布式缓存将比使用
MemoryCache
@ChrisPratt实现的任何缓存都更加健壮。我们正在缓存数据库中的一些重对象,但它们需要每24小时刷新一次。我将对象设置为过期,在它们过期之前,我调用相关的回调来更新它们。对于任何类型的计划回调,您应该使用类似Hangfire或Revalee的东西。它应该完全独立于您的应用程序(尽管它可能利用您的应用程序来完成工作)。任何试图在进程中安排某种回调的尝试都注定会失败,因为IIS进程是有意丢弃的,并且被视为是一次性的。@ChrisPratt我读到的信息似乎表明MemoryCache可以很好地解决这个问题;这是它的预期目的。对于我们来说,仅仅使用一个库来存储两个对象未免太过分了。缓存项指定永远不应释放它们--.NET不会出于内存目的杀死它们。MemoryCache本身的作用域是应用程序,也不会被杀死。