内存缓存中的Dotnet Core-默认过期时间是多少

时间:2018-10-05 13:32:43

标签: asp.net-core-mvc memorycache

我在dotnet核心C#项目中使用MemoryCache。我正在使用它存储我从集合中读取的枚举列表(我想存储它,因为它使用反射来加载枚举,这需要时间)。

但是,由于我的收藏集不会改变,所以我根本不希望它过期。我怎么做?如果我没有设置任何过期时间(SlidingExpiration或Absolute Expiration),我的缓存将永不过期吗?

1 个答案:

答案 0 :(得分:3)

如果您未指定绝对和/或滑动到期时间,则该项目理论上将无限期保留缓存。实际上,持久性取决于两个因素:

  1. 内存压力。如果系统资源受限,并且正在运行的应用程序需要额外的内存,则可以从内存中删除缓存的项目以释放​​RAM。不过,您可以通过将条目的缓存优先级设置为CacheItemPriority.NeverRemove来禁用此功能。

  2. 内存缓存是进程绑定的。这意味着,无论出于何种原因重新启动服务器或应用程序重新启动,存储在内存缓存中的所有内容都将消失。此外,这意味着在Web场方案中,应用程序的每个实例将拥有自己的内存缓存,因为每个实例都是单独的进程(即使您只是在同一服务器上运行多个实例)。

如果您只关心一次真正执行操作,并且在应用程序关闭后甚至在应用程序的多个实例之间都保留结果,那么您需要对SQL Server或Redis等后备存储使用分布式缓存。