| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 大数据 -> 盘点一下那些不得不知的缓存知识 -> 正文阅读 |
|
|
[大数据]盘点一下那些不得不知的缓存知识 |
1.缓存的本质1.1 缓存是什么缓存是用于存储数据的硬件或软件的组成部分,以使得后续更快访问相应的数据。缓存中的数据可能是提前计算好的结果、数据的副本等。典型的应用场景:有cpu cache, 磁盘cache等。
几种存储器读写速度也是相差很大的,读写速度从大到小的排列顺序:通用寄存器>高速缓存>主存>外存。
1.2 缓存的作用在传统的后端业务场景中,访问量以及响应时间的要求均不是很高,通常只是用单DB即可满足要求,但是随着业务的发展,访问量慢慢上来了,DB就有点吃不消了,响应时间也出现了大幅度增长,严重影响到用户体验(慢),这时会通过增加DB实例/读写分离等多种手段进行优化,增大DB层的性能,但这些远远不够,访问量一般都是指数级增长,但是这种扩展都是线性的,一下子就无法满足响应时间的要求。这样就引入Cache层,将高频访问到的热数据放入缓存中,可大大提高系统整体的承载能力,这样原有的架构也变成Cache+DB两层。
这样架构优化有,有以下几种好处:
举个例子,在实际业务中有一个查询接口的系统需求是系统能承载峰值为10万次/秒的请求查询,且查询结果和实际系统存在一定程度上的不一致性,但是延时时间不能超过5秒。大致可以推算出,Tomcat的吞吐量为5000/s,Redis的吞吐量为50000/s,MySQL的吞吐量为700/s,可以看出加了缓存之后大大提高了系统的承载能力,当然也需要综合业务需求考虑数据的一致性和用户体验问题。
1.3 访问缓存的模式通常应用访问缓存有以下几种模式:
2. 缓存的高可用与高并发2.1 缓存高可用一般的缓存方案是基于分片的主从来实现的,通过分片思路来分隔大数据量的查询,通过主从来说完成高可用和部分高性能需求。通过多个数据副本,来化解查询所带来的性能压力。使用异步复制的方式实现主从,通过强一致性协议本来保证,即写事务从主节点开始,并发送事务给从节点,所有从节点都会收到并返回数据的信息给主节点,然后主节点返回成功。在这个过程中都是内存操作,所有主节点和从节点都通过异步读写数据来保证同步。
2.2 缓存高并发网上有大神实测过,MySQL在命中内存索引的情况下可达到10万每秒的QPS,Redis也有大致相同的性能表现,这里关系到网络IO和内存。还有些提升缓存访问性能的其他办法,比如把没有依赖关系的缓存访问变成并行执行,把有依赖的关系的保留串行执行,这种模式会使用到CompleteFuture这样的任务工具。比如,要获取一个课表的信息,需要同时获取商品的课程、教师、课节等信息。
3. 常用的缓存介绍经常使用的缓存有两种,一种是内存型缓存,比如Map/Ehcache/Guava Cache,另一种缓存中间件如Redis、Memcached等分布式缓存。
** 一般目前常用的分布式缓存中间件有Redis/Memcache/Tair,在做技术架构设计时,分布式缓存的技术选型常需要考虑以下几个因素: 数据类型/线程模型/持久机制/客户端/高可用/队列支持/事务/数据淘汰策略/内存分配。**
4. 注意事项4.1 缓存雪崩缓存雪崩指的是大量缓存在同一时间全部失效,而假如恰巧这一段时间同时又有大量请求被发起,那么就会造成请求直接访问到数据库,可能会把数据库冲垮。缓存雪崩一般形容的是缓存中没有而数据库中有的数据,而因为时间到期导致请求直达数据库。解决缓存雪崩的方法:
4.2 缓存击穿缓存击穿和缓存雪崩很类似,区别就是缓存击穿一般指的是单个缓存失效,而同一时间又有很大的并发请求需要访问这个key,从而造成了数据库的压力。解决缓存击穿的方法:
4.3 缓存穿透缓存穿透指的是不存在的key进行大量的高并发查询,导致缓存无法命中,每次请求都要穿透到后端的数据库进行查询,使数据库的负载过高,压力过大。对于缓存穿透问题,加锁并不能起到很好的效果,因为本身key就是不存在,所以即使控制了线程的访问数,但是请求还是会到达数据库。解决缓存穿透的方法:
5.相关实践
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/27 2:07:02- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |