我应该使用什么类型的数据库?什么对象关系映射器?什么部署策略?有时甚至在编写下一个杀手级应用程序之前就已经讨论和设计了用户界面。不幸的是,人们仍然很容易忘记那些杀手级应用程序需要迅速达到临界质量。如今,临界质量不仅仅是几百或几千人——更像是数百万人!
提供一种架构以跟上增长并允许轻松扩展必须以某种方式包括缓存。缓存必须是初始设计的一部分,并且需要与数据库讨论相同数量的脑力。之后引入一个干净的缓存层通常与重写系统以首先使用它一样复杂。
在意识到您有时需要缓存并且越早引入越容易之后,您会想知道:缓存究竟是什么?
缓存通常是一个组件(应用程序的内部或外部),用于存储和提供对部分数据集的快速访问。这些数据集被称为热点数据,因为它们经常被使用或最近被使用过。有两种类型的缓存。第一个是否则会花费很长时间来计算/处理的信息。第二个源自另一个底层外部资源。为此,缓存加快了访问时间,以防止缓慢的查询操作或高延迟往返。
缓存旨在快速响应与使用地图或字典(键值对)相当的简单请求。因此,它们的性能优于典型的通用数据库或其他系统一个数量级,并且可以近乎实时地进行回答。此外,大多数缓存实现都提供对那些底层数据存储的直读和直写,以实现透明访问。
缓存优先是一种架构设计模式,它提醒架构师在设计新的软件架构时将缓存视为一等公民。然而,一个好的缓存层并不像听起来那么容易,因为许多架构和用例因素会影响设计决策。
地理缓存、部分缓存、分布式缓存和所有其他类型的常见缓存解决方案满足不同的用例并解决不同的问题。选择正确的缓存策略只是一个开始,其他需要考虑的事情包括选择最匹配的驱逐算法(定义是否以及何时丢弃、删除或更新元素)或将使用哪种拓扑(本地或远程缓存)。
我撰写的 Hazelcast 新 缓存策略白皮书 提供了缓存及其用途的一般概述,同时深入洞察了许多缓存策略、它们的优缺点以及何时应用它们。