缓存-发展历史
硬件
CPU和内存的速度差,那么就有CPU缓存,而且是多层缓存。
操作系统
也有缓存。就是内存地址的逻辑地址和实际地址的映射。
软件
缓存中间价。
总结
本质是两个设备之间的速度差,那么就有必要弄一个缓存中介。
缓存-网络:代理
代理
1.请求代理 //正向
2.响应代理 //反向
缓存-前端
单页面应用
H5
清单里的数据,会从服务器拉取最新的数据。
页面缓存
app-移动设备
pc-客户端程序
每个客户端程序都会有缓存数据。
缓存-网络:cdn
策略
1.过期时间
2.服务器更新数据之后,主动通知
比如通过version版本号,反正就是唯一请求路径——每次都是请求新的数据。
程序员/开发者
cdn对程序员是透明的,无非是把静态资源由一份变成了两份
1.一个是自己服务器存储 //这个和以前是一样
2.一个是cdn服务商的服务器 //
缓存-数据库
缓存的东西是查询的输入和输出: 1.输入 //key sql语句
2.输出 //value 查询结果
其实也就是键值对。
数据一致性问题 只要是缓存,就会带来数据一致性问题,数据库也不例外。 特别是数据更新比较频繁的时候,命中的缓存就是旧数据而不是新数据。
负载均衡路由算法-轮询和hash
优点
1.轮询 //请求更加均衡
2.hash //维持会话数据
缓存-算法
是什么
缓存满的时候,删除什么数据的算法。
解决方案
1.是否使用
最近最少使用,被删除。
最近被使用,重新放到链表前面,那么自然最近没被使用的就越来越往后面。
2.计算次数
总共使用次数最少,被删除。
计算使用总次数,次数多的放到前面,次数少的放到后面。按使用总次数排序。
总结
反正各种算法就是从不同的维度去计算热点数据,把非热点数据删除!
数据结构
链表
1.头
2.尾
缓存-穿透和雪崩
是什么
1.单个数据没有命中缓存,就是穿透缓存,直接从数据库取数据。
2.大量数据没有命中缓存,大家都从数据库取数据,那么就会导致数据库挂了即所谓的雪崩,雪崩就是指数据库挂了。
解决方案-穿透
数据库没有数据,也要缓存。
解决方案-雪崩
没有特别完美的方法。
算法-重做
前言
有很多问题的解决方案都需要使用到重做思想。
分布式事务-补偿提交
所谓补偿,就是重做。而且会重做多次。
http请求框架-HttpClient
请求的时候,也不是只请求一次,而是会请求多次。因为可能会有网络问题,导致那一瞬间请求失败,或者是请求成功但是响应失败——那么这个时候需要做幂等处理。
上下游通知也会重做多次,如果没有收到对应响应的话
场景是这样的
1.通知:上游——下游
2.下游:接受到上游通知数据之后,必须给成功响应到上游,否则上游没有收到成功响应就可能多次发送通知。//具体间隔时间发送任务是由定时任务实现
多机房甚至异地机房
前言
多机房和异地机房是一样的,无非是距离隔得更远一点,主要是防止地震等不可抗因素。
架构图
服务
不携带状态的服务,不同机房相当于是同一个机房一样。
数据库
基于复制来同步数据。
异地容灾
如果数据库挂了,直接切换到另外一个机房的数据库即可,这就是所谓的异地容灾。
缓存-云计算
可以做到自动水平扩容或伸缩,对程序员透明。
参考
分布式缓存 //专门讲分布式缓存就这一本书,很多人一起合写的