Java缓存设计
什么是缓存
缓存(Cache)一词源于1967年的一篇电子工程期刊论文(来自维基百科
),最开始主要为描述CPU
与内存之间的高速缓存,到现在,缓存的定义也被扩展,他可以代指一个具体的事物,如CPU缓存
、硬盘缓存
,这些我们可以统称为硬件缓存
。缓存也可以代指一种技术,如浏览器缓存
、服务器缓存
,这些我们可以统称为软件缓存
。
硬件缓存,可以看做是一块芯片,它被安装在cpu、硬盘这些具体的物体上,在计算器系统运行时,减轻系统负荷,提高数据传输效率。
软件缓存,主要为计算机软件的特性,例如,chrome浏览器会记录网页图片。
简单总结一下,缓存就是将一些频繁使用的数据(热点数据)临时存储起来,方便外部请求获取。
为什么要使用缓存
在使用缓存之前,我们应该确定一件事情,即当前项目是否需要缓存。
一般来说,主要从两个方便:
- 服务器资源:
- Cpu占用高(排除死循环的情况),常见的有,正则表达式的计算,如果频繁的计算会导致cpu占用较高。
- 数据库服务器IO占用高,总是频繁的查询数据库
- 用户体验,对于web应用来讲,一个页面或接口响应慢,在对其进行优化时,往往都是采用缓存的技术手段
缓存的三步骤
本地缓存
- 本地缓存,即应用进程内缓存,将数据直接缓存在内存中,最简单的是直接存储在map中,每次请求时,先从map中获取,没有获取到数再从数据库中获取。
- 本地缓存相对其他缓存而言,它是一种速度极快的缓存。的但它会导致应用内存占用较高
分布式缓存
- 分布式缓存,即进程外部的缓存应用,主要使用NoSQL应用。
- 常见的NoSQL应用主要分为4类:
- K-V存储,以Redis为例
- 文档数据库,以MongDB为例
- 列式数据库,以HBase为例
- 全文搜索引擎,以ElasticSearch为例
多级缓存
顾名思义,多级缓存即本地缓存与分布式缓存的结合。
一级使用本地缓存,二级为分布式缓存。