高速缓存线的到期有两个部分(按时间):
缓存线"到期"之前的时间跨度.在这种情况下,这意味着它有资格被移除(也称为"驱逐").这是一件被动的事情--没有一段代码主动地将缓存线从有效设置为过期,它只是一个变得比"现在"更"旧"的时间戳.
执行活动进程的周期时间,该周期扫描缓存中的过期缓存行并将其删除.
两者的组合导致单个高速缓存线的实际到期和移除时间跨度.如果我们举一个从插入时间起5分钟到期的例子,并且每15秒扫描一次周期,那么在最好的(或短的)情况下,该周期正好运行,因此在同一时间发生到期,并且在5分钟之后立即移除该行.最糟糕(或最长)的情况是扫描周期正好在到期前结束,并且高速缓存线持续5分15秒(所有+/-系统计时/时钟不准确).
如果将两者都设置为5分钟,则最终将得到单个缓存线,其存活时间在5分钟到10分钟之间.(从统计学上讲,假设插入是正态分布的.)
对于这个答案的future 读者:请记住这important notice in the docs
There are two MemoryCache classes within .NET,一个在System.Rounme.Cating命名空间中,另一个在Microsoft.Extensions.Caching命名空间中
(我强调)
还请注意,还有一个SlidingExpation,它在问题中有not个问题,在这个答案中也没有.当高速缓存线命中时,SlidingExpation将延长到期阈值.如果使用它,建议同时设置滑动和绝对,以避免频繁命中的高速缓存线never实际上被逐出(这会导致问题).