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

Caching 我们什么时候执行缓存失效?,caching,cache-invalidation,Caching,Cache Invalidation,维基中关于缓存失效的摘录- “缓存失效是计算机系统中的一个过程,在这个过程中,缓存中的条目被替换或删除。”但是,我们究竟为什么需要使缓存失效呢? 我只能想到可能的情况- 如果由于某种原因缓存和数据库不同步,缓存中的数据将过时。要同步它,我们需要使缓存无效。但是,缓存和数据库同步(除了数据尚未写入两者的短时间内)不是理想的行为。因此,如果我们发现缓存中不包含正确的数据,缓存失效可以作为补救措施。这是它唯一的目的吗?原因很多。可能是最常见的一种:缓存(通常在本质上)比需要存储的数据总量要小得多 换句

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

原因很多。可能是最常见的一种:缓存(通常在本质上)比需要存储的数据总量要小得多

换句话说:如果您只是不断地向缓存中添加元素,它将成为数据的完整副本。分别,您的内存很快就会用完

换句话说:缓存的本质是:它的大小是有限的。因此,你迟早会面临这样的决定:“我不能只向缓存中添加新元素,我必须先腾出空间”。然后你必须做的就是:使缓存中的一个条目无效,这样就有空间容纳那个“新”的条目


根据OP的评论:通常,使整个缓存失效类似于“重新启动”你的程序,或“重新安装你的应用程序”,或“重新启动你的设备”。它通常被视为“通用”的意思是确保程序/应用程序被重置为已知的良好状态。

缓存失效是存在的,因为大多数缓存都是在性能与容量的权衡基础上运行的

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

CPU采用类似的层次结构,最靠近CPU的CPU是最快的,但也是最小的。这种情况下的成本不一定只是金钱成本,还包括物理空间、电力使用、热量生产等

  • CPU寄存器-最快,非常小
  • CPU缓存(也有自己的层次结构)-快速、小型
  • RAM-中型、大型
  • 为了使缓存保持最佳性能,必须维护访问频率最高的项,以便缓存命中率和未命中率更好。我们希望尽可能少地从较慢的来源获取数据。类似地,由于大小限制,我们需要逐出访问频率最低的项


    缓存失效是一种策略,我们将使用该策略来决定何时收回哪些项目,以便为可能再次需要的较新项目腾出空间。如果您的缓存包含其他数据源的完整表示,则此项不适用。

    您的意思是,如果基础数据结构发生更改,“某人”将使用“新”数据刷新缓存,但事实并非如此,因为缓存仅在需要使用的基础上填充。也就是说,如果基础数据发生更改,请删除过时数据并等待将来是否需要缓存。如果是,请重新填充。我想您没有意识到,
    缓存和数据库不同步的事件太频繁了,不能将其称为不受欢迎的行为。它发生的频率比几次要高,您的业务逻辑应该受到它的影响。否则为什么还要缓存?@Smutje-缓存更新策略不同。我认为更新一个“需要使用基础”属于“写缓存”策略。在回写和直写策略中,我们更新缓存和DB。缓存和DB不同步-太频繁?我知道这种情况发生在“写缓存”策略中。考虑“写通”或“写回”缓存更新策略。在这方面,它们不会失去同步太久。只是为了记录:请尽量具体。你看,这个社区是针对编程方面的特定问题的。这不是一个我们进行长时间讨论的地方(通过使用评论提出越来越多的问题)。从这个角度来看,您可能希望查看以了解如何以及在此处询问什么。“缓存(本质上)比总数据量小得多”这并不是真正正确的。考虑Web缓存。从理论上讲,每个网络节点都可以拥有每个可缓存项的一个副本—性能上的优势在于减少了满足请求的网络跳数。这种缓存不需要很小才能有效(顺便说一句,没有否决权)答案并没有解决缓存失效的根源:多线程(或多用户)环境。明白了。说得好。当尚未达到缓存限制时,有什么理由这样做吗?我只是在修复缺陷的过程中才发现它——由于客户接收到陈旧数据,导致了一个实时缺陷。然后,我们的第一个反应是“使该用户帐号的缓存无效”。在深入研究缓存中的数据不同步的原因之前,我们将此作为一个快速修复方法。@MarkJeronimus问题的哪一部分集中在多线程/多用户上?OP给出了一个例子,我在上面给出了一个更一般的观点@迈克尔相应地修改了答案。