AWS ElastiCache - 延迟加载
填充缓存和维护缓存的方法有很多种。这些不同的方法称为缓存策略。游戏网站维护排行榜数据需要的策略与新闻网站中显示的热门新闻不同。在本章中,我们将研究一种称为延迟加载的策略。
当应用程序请求数据时,请求会在 ElastiCache 的缓存中搜索数据。有两种可能性。数据存在于缓存中或不存在。因此,我们将情况分为以下两类。
缓存命中
应用程序从缓存中请求数据。
缓存查询发现缓存中有更新的数据。
结果返回给请求应用程序。
缓存未命中
应用程序从缓存中请求数据。
缓存查询发现缓存中没有更新的数据。
缓存查询向请求应用程序返回一个 null。
现在,应用程序直接从数据库请求数据并接收数据。
然后,请求应用程序使用直接从数据库接收到的新数据更新缓存数据库。
下次请求相同的数据时,它将落入上述缓存命中场景。
上述场景通常可以通过下图描述。

延迟加载的优势
仅缓存请求的数据 − 由于大多数数据从未被请求,因此延迟加载可避免用未请求的数据填充缓存。
节点故障并不致命 − 当节点发生故障并被新的空节点替换时,应用程序将继续运行,但延迟会增加。当向新节点发出请求时,每次缓存未命中都会导致查询数据库并将数据副本添加到缓存中,以便从缓存中检索后续请求。
延迟加载的缺点
缓存未命中惩罚 − 每次缓存未命中都会导致 3 次往返。第一次,从缓存中初始请求数据,第二次,查询数据库以获取数据,最后将数据写入缓存。这可能会导致数据到达应用程序的明显延迟。
过时的数据 − 如果仅在发生缓存未命中时将数据写入缓存,则缓存中的数据可能会变得过时,因为当数据库中的数据发生更改时,缓存中没有更新。此问题由"直写"和"添加 TTL"策略解决,我们将在下一章中看到。