缓存失效了,怎么办?

Part 01
前言在高并发的怎么办系统架构中,大量网络请求的缓存失效并发处理,导致数据库的怎么办I/O消耗是非常巨大的,为了快速读取数据,缓存失效减少网络请求时延,怎么办缓解数据库的缓存失效压力,因此在软件开发中引入了缓存技术。怎么办但是缓存失效在缓存的使用过程中也会遇到一些特殊情况导致缓存失效,常见的怎么办缓存失效的情况有三种:缓存穿透、缓存击穿、缓存失效缓存雪崩。怎么办
Part 02
缓存失效的缓存失效三种情况缓存(以Redis缓存为例)的引入可以减少请求数据库的次数,提高查询效率,怎么办从而提升系统性能。缓存失效一般的怎么办流程是:应用发起请求后,先查询缓存中是否存在所需数据,如果缓存中存在,直接返回数据,云服务器如果缓存中不存在所需数据,则需要去查询数据库,如果数据库中存在所需数据,则一方面存入缓存,另一方面返回查询结果,如果数据库中不存在,则返回空或者错误。

图1 缓存使用流程图
- 缓存穿透
缓存穿透(Cache Penetration)是指查询一个一定不存在的数据,即用户访问的数据既不在缓存当中,也不在数据库中。由于缓存中查询不到数据,请求会去查询数据库,然而数据库中也不存在该数据,也不会写入缓存,导致查询该数据的时候,每次都要去数据库中查询,给数据库到来压力。
- 缓存雪崩
缓存雪崩(Cache Avalanche)是指大量的缓存数据在某一时刻超过了缓存的过期时间,同时失效,导致高并发的请求同时去访问数据库,造成数据库压力过大,导致系统崩溃。这是针对多个缓存数据而言的。网站模板
- 缓存击穿
缓存击穿(Cache Breakdown)是指缓存过期的一瞬间,有大量的请求去查询同一个缓存数据,由于该数据在承载着大并发,当该数据失效的一瞬间,持续的大并发就会直接去请求数据库,造成数据库压力倍增。这是针对一个缓存数据而言的。
Part 03
解决方案针对缓存穿透的解决方案:
1.第一种方案是采用布隆过滤器进行数据拦截。这也是针对缓存击穿采用的常用方案。在写入数据时,使用布隆过滤器对数据的key进行标记,当带有数据key的请求过来后,先用布隆过滤器验证key是否存在,如果存在,再进入缓存或者数据库中进行查询。
2.第二种方案是缓存空值。当在数据库中查询不到数据时,将其缓存为空值或者默认值。服务器租用此时需要注意,针对其的缓存过期时间不宜过长,一般设置为5分钟内,当数据库被写入或者更新该key的新数据时,缓存必须同时更新,保证数据的一致性。
针对缓存雪崩的解决方案:
1.一般是将key的过期时间后面增加一个随机数,让过期时间分散开,使key均匀失效,减少缓存时间过期的重复率。
2.利用加锁或队列的方式,保证缓存单线程写,但是这种方案会影响并发量,多个请求过来时,只有一个在进行正常的操作,其他请求都会在等待的状态,影响程序性能,不推荐使用。
3.使用缓存标记,这是比较好的解决办法。判断标记是否过期,过期则去数据库中请求,而缓存数据的过期时间要设置的比缓存标记长些,如此一来,当一个请求去操作数据库的时候,其他的请求拿到的是上一次的缓存数据。
针对缓存击穿的解决方案:
1.使用互斥锁,当缓存的key过期时,多个请求过来时只允许一个请求去查询数据库构建缓存,其他请求等待该请求执行完毕之后,重新从缓存中获取数据。
2.针对访问量比较大的数据,即热点数据,不设置缓存过期时间,后台异步更新缓存,适用于不严格要求缓存一致性的场景。
相关文章
联想小新510si7(轻薄便携,细节出色,高效办公娱乐利器)
摘要:在当今信息高速发展的时代,人们对于笔记本电脑的要求越来越高。联想小新510si7作为一款性能强悍的高性能笔记本电脑,以其出色的表现和卓越的设计,成为了众多消费者眼中的首选。本文将从...2025-11-05
在互联网时代,域名已经成为了企业和个人在网络上标识身份的重要工具。无论是建立一个企业网站、个人博客,还是开展电子商务,域名都是不可或缺的一部分。然而,许多人在购买或出售域名时,常常会问一个问题:出售域2025-11-05
1行代码消除PyTorch的CUDA内存溢出报错,这个GitHub项目揽星600+
本文经AI新媒体量子位公众号ID:QbitAI)授权转载,转载请联系出处。多少人用PyTorch“炼丹”时都会被这个bug困扰。一般情况下,你得找出当下占显存的没用的程序,然后kill掉。如果不行,还2025-11-05
本文转载自微信公众号「数据和云」,作者崔虎龙 。转载本文请联系数据和云公众号。MySQL使用内存上升90%!在运维过程中50%的几率,会碰到这样的问题。算是比较普遍的现象。MySQL内存使用率过高,有2025-11-05硬盘Ghost分区教程(使用Ghost软件实现硬盘分区备份与还原,保障数据安全与稳定性)
摘要:在现代社会中,我们越来越依赖计算机和硬盘存储设备。然而,硬盘中存储的数据可能会因为误操作、病毒攻击或硬件故障而丢失。为了防范风险,我们需要经常对硬盘进行备份,并能够快速恢复数据。本...2025-11-05
码老湿,Redis 6.0 之前为什么不使用多线程?官方答复:使用 Redis 时,几乎不存在 CPU 成为瓶颈的情况, Redis 主要受限于内存和网络。 在一个普通的 Linux 系2025-11-05

最新评论