来自 Wiki 关于缓存失效的摘录 - “缓存失效是计算机系统中的一个过程,其中缓存中的条目被替换或删除。” 但是,到底为什么我们需要使 Cache 失效呢?我只能想到可能的情况 - 如果由于某种原因缓存和数据库不同步,缓存中的数据将是陈旧的。要同步它,我们需要使缓存无效。但是,缓存和数据库同步(除了数据尚未写入两者的短时间内)不是理想的行为。因此,如果我们发现缓存不包含正确的数据,缓存失效可以作为一种补救措施。这是它的唯一目的吗?
2 回答
缓存失效的存在是因为大多数缓存都是基于性能与容量的权衡来运行的。
考虑固态驱动器与硬盘驱动器。SSD 的性能会更好,但在相同的成本水平下,您可以存储的数据量会更差。人们通常会将它们结合起来,以获得用于频繁访问文件(例如操作系统)的 SSD 和用于原始存储容量的 HDD 的性能。
CPU 采用类似的层次结构,其中最接近 CPU 的速度最快,但也是最小的。这种情况下的成本不一定只是金钱成本,还包括物理空间、电力使用、热量产生等。
- CPU 寄存器 - 最快,非常小
- CPU 缓存(也有自己的层次结构)——速度快、体积小
- RAM - 中型、大型
为了使缓存保持最佳性能,必须维护最常访问的项目,以便缓存命中与未命中的比率更高。我们希望尽可能少地从较慢的资源中获取。同样,由于有限的大小限制,我们需要驱逐访问频率最低的项目。
缓存失效是我们将使用的策略,以决定何时驱逐哪些项目,以便为更有可能再次被需要的新项目腾出空间。如果您的缓存包含某些其他数据源的完整表示,则它不适用。
有很多原因。可能是最常见的一种:与需要存储的数据总量相比,缓存(通常本质上)要小得多。
换句话说:如果您只是不断地向缓存中添加和添加元素,它就会成为您数据的完整副本。相应地,您很快就会耗尽内存。
换句话说:缓存的本质是这样的:它的大小是有限的(不知何故)。因此,迟早你会面临这样的决定:“我不能只向缓存中添加一个新元素,我必须先腾出空间”。然后您必须这样做:使缓存中的一个条目无效,以便为“较新”条目留出空间。
并给出了 OP 的评论:通常使整个缓存失效类似于“重新启动”您的程序,或“重新安装您的应用程序”或“重新启动您的设备”。它通常被视为“通用”意味着确保程序/应用程序重置为已知的良好状态。