- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将我的 .Net 框架应用程序迁移到 .Net Core,在此过程中,我想将我的内存缓存从 System.Runtime.Caching/MemoryCache
至Microsoft.Extensions.Caching.Memory/IMemoryCache
.但我对 IMemoryCache
有一个问题。 ,我找不到在删除/驱逐之前刷新缓存的方法。
在 System.Runtime.Caching/MemoryCache
的情况下,有UpdateCallback
位于 CacheItemPolicy
的属性(property)我可以设置回调函数的委托(delegate),这个函数将在缓存对象被驱逐之前在一个单独的线程中调用。即使回调函数需要很长时间才能获取新数据,MemoryCache
将在过期期限后继续提供旧数据,这确保我的代码在缓存刷新过程中无需等待数据。
但是我在 Microsoft.Extensions.Caching.Memory/IMemoryCache
中没有看到这样的功能。 , 有RegisterPostEvictionCallback
属性(property)和PostEvictionCallbacks
MemoryCacheEntryOptions
中的扩展方法.但是这两个都将在缓存条目从缓存中逐出后被触发。所以如果这个回调需要更长的时间,所有获取这个数据的请求都需要等待。
有什么解决办法吗?
最佳答案
那是因为没有驱逐,而且,我认为,这使得 IMemoryCache 不是缓存:
“当系统内存不足时,ASP.NET Core 运行时不会修剪缓存。”
https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-5.0#use-setsize-size-and-sizelimit-to-limit-cache-size
“如果没有设置 SizeLimit,缓存会无限增长。”
“缓存大小限制没有定义的度量单位,因为缓存没有衡量条目大小的机制。”
“如果缓存条目大小的总和超过 SizeLimit 指定的值,则不会缓存条目。”
因此,IMemoryCache 不仅无法完成您期望从缓存中完成的最基本的事情——通过驱逐最旧的条目来响应内存压力——您也没有您期望的插入逻辑。将新项目添加到完整的“缓存”不会驱逐旧条目,它拒绝插入新项目。
我认为这只是一个不幸的字典,根本不是缓存。蛋糕/类(class)是个谎言。
为了让它真正像缓存一样工作,您需要编写一个测量内存大小的包装器类,以及与驱逐(通过 .Remove()
)以响应内存压力和过期的包装器交互的系统代码,定期.你知道——实现缓存的大部分工作。
所以,你找不到在驱逐之前更新的原因是因为默认情况下没有任何驱逐,如果你已经实现了自己的驱逐方案,你已经写了这么多实际的缓存,写的是什么多一点?
关于c# - IMemoryCache,驱逐前刷新缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406476/
每个人都知道 session 中有缓存。 这个缓存通常可以通过两种方法清除: Session.Evict Session.Clear 第二种方法不仅删除单个条目的所有缓存。 我有商业方法。它接收大对象
假设一个小型测试项目(sbt 0.13.8,完整项目为 gist ): name := "test" organization := "org.example" version := "0.1.0-S
我正在寻找一种方法,使 infinispan 的默认驱逐与 TreeCache 实现一起工作。到目前为止,我搜索了文档和谷歌,但没有找到符合我问题的内容。这是 infinispan xml 中缓存的当
我想知道 Apache Cassandra 中的 Ignite 缓存逐出。是否可以将缓存条目逐出 cassandra(如 offhaep/文件逐出)。 正如我从文档( https://apacheig
我希望我知道这个列表中的每个项目到底是什么,它是如何工作的,后果是什么以及何时是正确的使用时间。 刷新 驱逐 复制 冲洗 我什至想知道每个人的作用,但我不太确定,所以我请求你的帮助,因为我真的很想了解
我希望我知道这个列表中的每个项目到底是什么,它是如何工作的,后果是什么以及什么时候是正确的使用时间。 刷新 驱逐 复制 冲洗 我什至想知道每个人是做什么的,但我不确定,所以我请求你的帮助,因为我真的很
当浏览器检测到存储空间非常低时,它可以选择驱逐 Service Worker 的缓存,如 W3C doc 所述。 . 由于我的用户可以选择为离线访问存储他们的预订,我想警告他们浏览器已删除它们。如何从
我计划在我的应用程序中使用 Guava Cache。部分 [K, V] 访问的对在统计上比其他对 >> 并且应该总是在缓存中可用。 根据 Sized Based Eviction 的规范 If you
我似乎无法找到下面看到的第一次驱逐的根本原因。如下所示,运行 evicted 不会提供与其相关的详细信息。 这一切都是在添加到 project/plugins.sbt 之后发生的:libraryDep
我希望以一种不知道集群上运行的应用程序细节的方式执行 Kubernetes 集群的自动滚动更新。原则上,PodDisruptionBudget 应该促进这一点。 问题来了:这个 Kubernetes
我正在将 Jenkins-X 用于一个相对较大的项目,该项目由大约 30 个模块组成,其中 15 个是服务(因此,包含 Dockerfile 和一个用于部署的相应 Helm 图表)。 在其中一些相对较
我是一名优秀的程序员,十分优秀!