一、客户端缓存
传统互联网:页面和浏览器缓存
1、页面缓存:
①逻辑:页面自身对某些元素或全部元素进行存储,并保存成文件。
②html:Cookie、WebStorage(SessionStorage和LocalStorage)、WebSql、indexDB、Application Cache等
②浏览器缓存:强制缓存和协商缓存
Ⅰ、强制缓存:直接使用浏览器的缓存数据(有个前提条件:Cache-Control的max-age没有过期或者Expires的缓存时间没有过期)
Ⅱ、协商缓存:服务器资源未修改,使用浏览器的缓存(304),要不然使用服务器资源
移动互联网:App缓存
把数据缓存在内存、文件或本地数据库(SQLite)中。比如图片文件
三、网络端缓存
通过代理的方式响应客户端请求,对重复的请求返回缓存中的数据资源
①web代理缓存:nginx(想必大家都知道)
②边缘缓存:CDN(具体概念就不做概述啦)
四、服务端缓存
1、数据库级缓存:
①数据库是用来存储和管理数据的。
②实现原理:MySQL在Server层使用查询缓存机制。将查询后的数据缓存起来。
K-V结构,Key:select语句的hash值,Value:查询结果
InnoDB存储引擎中的buffer-pool用于缓存InnoDB索引及数据块
2、平台级缓存
①概念:平台级缓存指的是带有缓存特性的应用框架。
②市面上流行的工具:GuavaCache 、EHCache(二级缓存,硬盘)、OSCache(页面缓存)等。这些都是部署在应用服务器上的,也称为服务器本地缓存或本地缓存。
- 优势:和应用程序在同一个进程,访问快,没有网络开销,一般情况下不会出现崩溃等相关问题
- 缺点:容量小,每个JVM有一份,有数据冗余
3、应用级缓存(最常见)
①缓存中间件:具有缓存功能的中间件:Redis、Memcached、EVCache(AWS)、Tair(阿里 、美团)等。采用K-V形式存储。利用集群支持高可用、高性能、高并发、高扩展。分布式缓存codis
- 优势:空间优势,在应用中共享(session共享),高可用(主从),高拓展(分区),集群
- 缺点:资源、网络开销、数据一致性等问题
对分布式缓存做一个对比,因为在互联网开发中比较常见
GuavaCache | Tair | EVCache | Aerospike | |
类别 | 本地缓存 | 分布式缓存 | 分布式缓存 | 分布式NoSQL数据库 |
应用 | 高并发下的本地缓存 | 阿里、美团 | Netflix、AWS | 国外比较常用 |
性能 | 高 | 较高 | 很高 | 较高 |
持久化 | 无 | 有 | 有 | 有 |
集群 | 无 | 有 | 有 | 有 |