1.1缓存的场景
定义:
缓存:最通用的解释就是可以进行高速数据交换的存储器。
缓存的分类
- 硬盘缓存(机械硬盘)
-
CPU 缓存(以intel的CPU为例)
CPU首先从L1一级缓存里面取数据,如果不存在则从二级缓存、三级缓存最终去内存中取数据。
L1d:数据缓存 L1i:指令缓存
缓存与内存的区别
我理解缓存和内存的概念不一样,缓存可以是所在主机部署,那么他就是在内存中,也可以独立部署,比如分布式缓存等等;
缓存淘汰策略
- 先进先出策略(FIFO)
- 最不经常使用的(LRU)
- 最近最少用(LFU)
缓存使用场景
前提:我们的应用抗不住用户并发访问量时,才会考虑使用。
- 将数据库的部分数据写入到缓存中;
- 列表排序分页场景;
- 计数器(限流)
- 详情内容放在缓存;
- 分布式session(用户权限、用户登录);
- 热点数据的排名(最热的数据放在前面);
- 发布订阅(小型的消息发布与订阅);
- 分布式锁;
单体架构看缓存
何为单体架构
一个归档包(例如war格式或者Jar格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。通过tomcat+db就可以完成;
单体架构与缓存
本地缓存与集中式缓存
1.2从架构看缓存
单体项目特点
- 单体项目中模块众多
- 模块之间紧耦合,不利于拆分
- 扩展性差
- 项目布署较复杂
集群架构
何为集群架构
对应于单机,一台机器忙不过来,在多台机器上面部署相同的代码,通过Nginx来负载均衡;
即:同一个业务,部署在多个服务器上 。
集群架构与缓存的关系
集群架构的特点
集群架构特点
- 以单体项目为基础进行业务系统的划分
- 系统之间存在数据冗余,系统耦合度较高
优点: - 项目架构简单,开发成本低
- 可以针对某一系统瓶颈进行适当扩展
- 不同系统可以用不同的技术实现
缺点: - 全部功能依然在一个系统中,后期难为维护
- 集群扩展到一定程度就会产生瓶颈
微服务
微服务架构特点
- 系统服务独立拆分
- 微服务单一原则
优点: - 服务拆分更细,服务可以重复使用
- 可以针对某个服务做性能扩展和优化
- 服务布署容易,业务之间互相影响较小,可以分别对不同服务做部署升级
缺点: - 服务越来越多,不好管理
- 服务需要不断增加故障监控、故障自愈、故障预警功能才能从众多服务中了解服务的健康状态
微服务核心点
微服务架构图
1.3缓存分类
1.3.1客户端缓存
页面缓存
- 页面自身可以对某些元素或者全部元素进行缓存;
- 服务端将静态页面或者动态页面进行缓存,供客户端使用;
浏览器缓存
- 减少冗余数据传输;
- 降低服务器的压力;
app缓存
- 安卓缓存
- IOS缓存
1.3.2服务端缓存
数据库缓存
- 数据库为了优化性能的自身缓存框架;
- MySql的查询缓存Query Cache
- 双刃剑:
- 数据库修改比较少,可以大幅度提升查询效率;
- 数据库修改比较多,成为系统的负担,反而降低查询效率;
平台级缓存
平台级缓存:带有缓存功能的专用库,或者具有缓存特性的框架
- Ehcashe
- Jboss Cache
- OS Cache
- Guava Cache
不用Map的原因:
- 内存管理:内存类,没有对内存进行控制和管理;
- 缓存过期策略
- 容量规划
- Map是否是线程安全
- 持久化
- 多实例数据同步及一致性
应用级缓存
- redis
-
memcache
- CDN缓存
内容分发网络