AWS ElastiCache - 延迟加载



有多种方法可以填充缓存并保持缓存的维护。这些不同的方法被称为缓存策略。维护排行榜数据的游戏网站需要的策略与新闻网站上趋势新闻显示的策略不同。在本章中,我们将研究一种名为延迟加载的策略。

当应用程序请求数据时,请求会在 ElastiCache 的缓存中搜索数据。有两种可能性。数据存在于缓存中或不存在。相应地,我们将情况分为以下两类。

缓存命中

  • 应用程序从缓存请求数据。

  • 缓存查询发现缓存中存在更新后的数据。

  • 结果返回给请求应用程序。

缓存未命中

  • 应用程序从缓存请求数据。

  • 缓存查询发现缓存中不存在更新后的数据。

  • 缓存查询向请求应用程序返回空值。

  • 现在,应用程序直接从数据库请求数据并接收它。

  • 然后,请求应用程序使用它直接从数据库接收的新数据更新缓存。

  • 下次请求相同数据时,它将属于上述缓存命中场景。

以上场景通常可以通过下图描述。

lazy_loading

延迟加载的优点

  • 仅缓存请求的数据 - 由于大多数数据从未被请求过,因此延迟加载避免用未被请求的数据填充缓存。

  • 节点故障不是致命的 - 当节点发生故障并被新的空节点替换时,应用程序继续运行,尽管延迟有所增加。随着对新节点的请求,每次缓存未命中都会导致数据库查询并将数据副本添加到缓存中,以便从缓存中检索后续请求。

延迟加载的缺点

  • 缓存未命中惩罚 - 每次缓存未命中都会导致 3 次往返。一次,从缓存中初始请求数据,两次,从数据库查询数据,最后将数据写入缓存。这可能会导致数据到达应用程序时出现明显的延迟。

  • 陈旧数据 - 如果仅在缓存未命中时将数据写入缓存,则缓存中的数据可能会变得陈旧,因为当数据库中的数据发生更改时,缓存不会更新。这个问题可以通过直写和添加 TTL 策略来解决,我们将在接下来的章节中看到。

广告