Cache演进史

张佳

不可忽缺的Cache

缓存作为计算机领域中最常见的组件,一直扮演着很重要的角色。在操作系统领域,通过L1,L2,L3三级Cache设计来提升CPU和内存间的数据访问速度;在类Unix操作系统中,通过Page Buffer和Page Cache来提升磁盘的IO效率;在企业级应用开发中,Cache一样是高并发场景下提升性能的必备组件,同时,随着NoSQL中间件的普及,和近些年来微服务技术的落地,我们也慢慢从单一的应用内Cache,迈向了分布式Cache。

作为一个后端开发人员,了解并合理的运用Cache,更是一项必备技能。工欲善其事,必先利其器,我们不仅仅要懂得运用Cache框架,同时也要熟悉Cache框架设计背后的背景和逻辑,继而如果从设计的角度抽象出如何设计一个优良的Cache框架。

本文主要就Java开发中的应用内缓存进行介绍,分析其主要原理,并从Cache框架发展历史的角度,层层递进,道出Cache框架的设计原理。

Cache使用场景

在服务端开发过程中,缓存通常用户提高接口的性能,主要的使用场景有一下几种

  1. 读多写少,尤其是在高并发场景下;
  2. 静态数据,或实时性要求较低的数据;
  3. 数据构建复杂,比较耗时

通过以上的场景看到,缓存主要用于提升数据访问性能,由此可以给出缓存的一个大致定义:

In computing, a cache is a hardware or software component that stores data so future requests for that data can be served faster

Cache实现的演化

基于ConcurrentHashMap

从缓存的定义可以看出,缓存是将数据存储在某种存储介质中,那么必然需要一个get和put方法分别用于查询和新增/修改缓存数据,那么基于HashMap的方式是最容易想到的一种实现,但是由于缓存通常在并发环境下使用,所以线程安全的ConcurrentHashMap成为最佳选择,下面是一