分布式缓存学习笔记-第一章 第二章

212 阅读4分钟

缓存-发展历史

硬件

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.下游:接受到上游通知数据之后,必须给成功响应到上游,否则上游没有收到成功响应就可能多次发送通知。//具体间隔时间发送任务是由定时任务实现

多机房甚至异地机房

前言
多机房和异地机房是一样的,无非是距离隔得更远一点,主要是防止地震等不可抗因素。


架构图


服务
不携带状态的服务,不同机房相当于是同一个机房一样。


数据库
基于复制来同步数据。


异地容灾
如果数据库挂了,直接切换到另外一个机房的数据库即可,这就是所谓的异地容灾。

缓存-云计算

可以做到自动水平扩容或伸缩,对程序员透明。

参考

分布式缓存 //专门讲分布式缓存就这一本书,很多人一起合写的