我们什么时候执行缓存失效?

时间:2019-04-29 08:04:56

标签: caching cache-invalidation

Wiki上有关缓存失效的摘录- “缓存失效是计算机系统中的一个过程,通过该过程可以替换或删除缓存中的条目。”但是,为什么我们需要使Cache无效? 我只能想到可能的情况- 如果由于某种原因缓存和数据库不同步,则缓存中的数据将过时。要同步它,我们将需要使缓存无效。但是,高速缓存和数据库进行同步(除了在短时间内尚未将数据写入两者时)不是理想的行为。因此,如果我们发现缓存不包含正确的数据,则缓存无效可作为一种补救措施。这是它的唯一目的吗?

2 个答案:

答案 0 :(得分:1)

存在缓存失效的原因是,大多数缓存都是基于性能与容量之间的权衡取舍的。

考虑固态硬盘与硬盘驱动器。在相同的成本水平下,SSD的性能会更好,但是可以存储的数据量会更糟。人们通常会结合使用它们来获得用于频繁访问的文件(例如操作系统)的SSD和用于原始存储容量的HDD的性能。

CPU的结构类似,其中最接近CPU的CPU最快,但也最小。这种情况下的成本并不仅是金钱成本,还包括物理空间,电力使用,热量产生等。

  1. CPU寄存器-最快,非常小
  2. CPU缓存(也具有自己的层次结构)-快速,小
  3. RAM-中大型

要使缓存保持最佳状态,必须维护最常访问的项目,以使缓存命中与未命中的比率更高。我们希望尽可能少地从较慢的资源中获取。同样,由于大小限制,我们需要逐出最不常访问的项目。

缓存无效化是一种策略,我们将使用该策略来确定哪些物品将被驱逐以及何时驱逐,以便为具有更高可能性再次需要的较新物品腾出空间。如果您的缓存包含其他数据源的完整表示,则此方法不适用。

答案 1 :(得分:0)

有很多原因。可能是最常见的缓存之一:与需要存储的数据总量相比,缓存(通常是自然的)小得多

换句话说:如果您只是继续向缓存中添加元素,那么它将成为数据的完整副本。分别,您将很快耗尽内存。

换句话说:缓存的性质是这样的:它的大小受到限制(以某种方式)。因此,迟早您会面临这样的决定:“我不能只向缓存添加新元素,我必须先腾出空间”。然后,您必须精确地执行以下操作: invalidate (无效)缓存中的一项,以便为该“较新”项留出空间。

OP给出的评论是:通常无效会看到整个缓存类似于“重新启动”程序,“重新安装应用程序”或“重新启动设备”。通常将其视为“通用”的意思是确保程序/应用程序重置为已知的良好状态。