2.1 什么是缓存
- 什么是缓存?
- 举个例子
- 越野车、山地自行车都有
避震器
,防止车体加速之后因惯性,在U
型地形上飞跃硬着陆导致损坏
,像个弹簧意义
- 同样,在实际开发中,系统也需要
避震器
,防止过高的数据量猛冲系统,导致其操作线程无法及时处理信息而瘫痪
- 在实际开发中,对企业来讲,产品口碑、用户评价都是致命的,所以企业非常重视缓存技术
缓存
(Cache)就是数据交换的缓冲区
,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地,例如
- 本地用高并发
Static final ConcurrentHashMap<K,V> map = new ConcurrentHashMap<>();
- 用于Redis等缓存
static final Cache<K,V> USER_CACHE = CacheBuilder.newBuilder().build();
- 本地缓存
Static final Map<K,V> map = new HashMap();
- 由于其被
static
修饰,所以随着类的加载而加载到内存之中,作为本地缓存,由于其又被final
修饰,所以其引用之间的关系是固定的,不能改变,因此不用担心复制导致缓存失败
2.1.1 为什么要使用缓存
- 言简意赅:速度快,好用
- 缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力
- 实际开发中,企业的数据量,少则几十万,多则几千万,这么大的数据量,如果没有缓存来作为
避震器
系统是几乎撑不住的,所以企业会大量运用缓存技术
- 但是缓存也会增加代码复杂度和运营成本
缓存的作用
- 降低后端负载
- 提高读写效率,降低响应时间
缓存的成本
- 数据一致性成本
- 代码维护成本
- 运维成本(一般采用服务器集群,需要多加机器,机器就是钱)
2.1.2 如何使用缓存
- 实际开发中,会构筑多级缓存来时系统运行速度进一步提升,例如:本地缓存与Redis中的缓存并发使用
浏览器缓存:
主要是存在于浏览器端的缓存
应用层缓存:
可以分为toncat本地缓存,例如之前提到的map或者是使用Redis作为缓存
数据库缓存:
在数据库中有一片空间是buffer pool,增改查数据都会先加载到mysql的缓存中