- 使用缓存是因为它们速度快。为了实现这一点,缓存通常将其所有数据存储在内存中,这样就可以避免昂贵的磁盘读取。查询关系数据库通常涉及到其他表的一个或多个联接,这会增加查询的复杂性(对于数据库),并减慢其执行速度。通过缓存,您可以将数据的非规范化表示形式存储在应用程序所需的确切形式中,也就是说,如果要向用户显示订单列表,则在缓存时不关心将订单头数据与订单行数据分开,因为所有这些数据都是为用户显示的。
- 缓存的数据是从持久的应用程序数据构建的,因此不必持久化缓存数据,因为它可以从应用程序数据重新生成,而且实际上每次应用程序数据更改时都会重新生成。如前所述,缓存系统通常将所有数据保存在内存中,因此可以存储的数据量受到可用RAM的限制。这导致缓存驱逐策略,如LRU (最近使用最少),这些策略删除不经常访问的数据,以便能够对更频繁访问的数据进行排序。
- 再来一次表演。然而,您需要评估您的全部用例,以确定什么是正确的解决方案。如果您的数据有很高的修改率,那么缓存可能无法提供比关系数据库或nosql数据库更多的好处,因为这些数据在缓存中的寿命不会足够长,无法使用。请记住,这不是一种双/或两种情况,您通常会使用缓存以及关系数据库或nosql数据库来增强性能。
关于体系结构,请记住,大多数缓存都是关键值存储,不支持诸如联接之类的关系操作。因此,如果您的数据是高度关系的,那么缓存可能是一个困难的匹配,因为您将需要设置复杂的依赖关系图,以便在相关实体更改时驱逐陈旧的缓存数据。