缓存

缓存

[TOC]
利用项目闲暇时间,对缓存知识进行了一次梳理,整理成了脑图,这里配合脑图进行一下说明。
脑图:缓存知识点整理

整体内容

缓存简介

1、缓存的本质是让数据更接近使用者,这里的使用者如何理解?不一定是真实用户,可以理解为调用方。如何设计缓存、哪些数据适合进行缓存、缓存的方式、缓存的回收策略、缓存带来的问题都是我们需要考量的点。
2、缓存的一个主要考察点是缓存的命中率,缓存命中率=从缓存中读取次数/总读取次数。
3、适合缓存的数据有:热点数据、I/O瓶颈数据、CPU瓶颈数据、符合5分钟法则的数据、符合局部性原理的数据。
4、缓存的回收策略:
何时回收:基于空间(空间达到某个阀值就回收)、基于条数(条数达到某个阀值就回收)、基于时间(按存活期、空闲期回收)
回收哪些: 先进先出;最近最少使用;最不常用等。
如何回收: delete

java应用缓存

java应用缓存是为了在极高并发场景下,减轻后端数据库压力的一种缓存方式,需要一定程度上允许缓存不一致的情况。
根据缓存位置,可以分为堆内缓存、堆外缓存、磁盘缓存。
堆内缓存,是指缓存位置在java堆中,无需序列化反序列化,速度最快,缺点是当数据量大时,GC变得很慢。
堆外缓存,是指缓存位置在java堆外的内存中,减少的GC时间,但是增加了序列化反序列化的开销。
磁盘缓存,相对于内存缓存而言,在机器重启后数据不会丢失,速度相对而言也是最慢的。
支持的插件有:guava cache(只支持堆内缓存)、ehcache(支持堆内、堆外、磁盘缓存)等。
引入java应用缓存后,需要考虑分布式场景下,如何保证数据的一致性。
可以有如下几种方案:
1、单节点通知其他节点,缺点是系统耦合、关系复杂。
2、MQ通知,缺点是引入了MQ,系统变得复杂。
3、定时任务从后端读取数据,更新缓存,放弃了实时一致性。

http缓存

http缓存有两种形式,强制缓存和对比缓存。有不同的交互流程、不同的表现形式、不同的实现方式、不同的使用场景,下面从这几个方面进行分析。

交互流程:

强制缓存-命中流程:请求缓存库,返回数据。
强制缓存-未命中流程:从服务器获取数据,返回数据和缓存规则,将数据写入缓存库。

对比缓存-命中流程:请求缓存库,返回缓存标识;将标识带到后台服务器验证是否有效;有效情况下,从缓存库获取数据。
对比缓存-未命中流程:请求缓存库,返回缓存标识;将标识带到后台服务器验证是否有效;无效情况下,返回数据和缓存规则;将数据写入缓存。

你可能感兴趣的:(缓存,缓存,redis,mybatis,http)