Redis - 做缓存时高并发问题:缓存穿透、击穿、雪崩,数据库缓存双写不一致

news2024/11/23 21:24:47

缓存穿透

当用户访问的数据既不在缓存也不在数据库中时,就会导致每个用户查询都会“穿透”
缓存“直抵”数据库。这种情况就称为缓存穿透。当高度发的访问请求到达时,缓存穿透不
仅增加了响应时间,而且还会引发对 DBMS 的高并发查询,这种高并发查询很可能会导致
DBMS 的崩溃。
缓存穿透产生的主要原因有两个:一是在数据库中没有相应的查询结果,二是查询结果
为空时,不对查询结果进行缓存。所以,针对以上两点,解决方案也有两个:
对非法请求进行限制
对结果为空的查询给出默认值

缓存击穿

对于某一个缓存,在高并发情况下若其访问量特别巨大,当该缓存的有效时限到达时,
可能会出现大量的访问都要重建该缓存,即这些访问请求发现缓存中没有该数据,则立即到
DBMS 中进行查询,那么这就有可能会引发对 DBMS 的高并发查询,从而接导致 DBMS 的崩
溃。这种情况称为缓存击穿,而该缓存数据称为热点数据。
对于缓存击穿的解决方案,较典型的是使用“双重检测锁”机制。
// 使用双重检测锁机制预防缓存击穿
// 若缓存中没有该数据,则先从DB中查询,然后再写入到缓存
if (turnover == null) {
    synchronized (this) {
        turnover = ops.get();
        if (turnover == null) {
            // 获取当前日期,并格式化
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            turnover = dao.selectTurnover(sdf.format(date));

            // 将查询结果写入到缓存
            ops.set(turnover, 10, TimeUnit.SECONDS);
        }
    }
}


缓存雪崩

对于缓存中的数据,很多都是有过期时间的。若大量缓存的过期时间在同一很短的时间
段内几乎同时到达,那么在高并发访问场景下就可能会引发对 DBMS 的高并发查询,而这将
可能直接导致 DBMS 的崩溃。这种情况称为缓存雪崩。
对于缓存雪崩没有很直接的解决方案,最好的解决方案就是预防,即提前规划好缓存的
过期时间。要么就是让缓存永久有效,当 DB 中数据发生变化时清除相应的缓存。如果 DBMS
采用的是分布式部署,则将热点数据均匀分布在不同数据库节点中,将可能到来的访问负载
均衡开来。

数据库缓存双写不一致

以上三种情况都是针对 高并发读 场景中可能会出现的问题,而数据库缓存双写不一致问
题,则是在 高并发写 场景下可能会出现的问题。
对于数据库缓存双写不一致问题,以下两种场景下均有可能会发生:
修改 DB 更新缓存 场景
对于具有缓存 warmup 功能的系统, DBMS 中常用数据的变更,都会引发缓存中相关数
据的更新。在高并发 请求场景下,若多个请求要对 DBMS 中同一个数据进行修改,修改后
还需要更新缓存中相关数据,那么就有可能会出现缓存与数据库中数据不一致的情况。
修改 DB 删除缓存 场景
在很多系统中是没有缓存 warmup 功能的,为了保持缓存与数据库数据的一致性,一般
都是在对数据库执行了写操作后,就会删除相应缓存。
在高并发 读写 请求场景下,若这些请求对 DBMS 中同一个数据的操作既包含写也包含读,
且修改后还要删除缓存中相关数据,那么就有可能会出现缓存与数据库中数据不一致的情况。
解决方案:延迟双删
延迟双删方案是专门针对于“修改 DB 删除缓存”场景的解决方案。但该方案并不能彻
底解决数据不一致的状况,其只可能降低发生数据不一致的概率。
延迟双删方案是指,在写操作完毕后会立即执行一次缓存的删除操作,然后再停上一段
时间(一般为几秒)后再进行一次删除。而两次删除中间的间隔时长,要大于一次缓存写操
作的时长。
解决方案:队

以上两种场景中,只所以会出现数据库与缓存中数据不一致,主要是因为对请求的处理出现了并行。只要将请求写入到一个统一的队列,只有处理完一个请求后才可处理下一个请求,即使系统对用户请求的处理串行化,就可以完全解决数据不一致的问题。

解决方案:分布式

使用队列的串行化虽然可以解决数据库与缓存中数据不一致,但系统失去了并发性,降低了性能。使用分布式锁可以在不影响并发性的前提下,协调各处理线程间的关系,使数据库与缓存中的数据达成一致性。

只需要对数据库中的这个共享数据的访问通过分布式锁来协调对其的操作访问即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1307337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

frp配置内网穿透步骤

frp配置内网穿透步骤 1.环境准备1.1 云服务器1.2 frp包 2. frp安装2.1 server服务端设置2.2 客户端配置 实现目标通过云服务器ip:8080访问内网电脑启动的web项目localhost:8080 1.环境准备 1.1 云服务器 服务器安装centos7.9, 安全组入口方向开通 7500 7000 8080 8060端口 …

CSDN云账号签约流程

在电脑端上进行提现操作,按提示进行即可。 问题 手机端无法签约。 电脑签约

【详解优先级队列(堆)】

目录 堆的概念 堆的性质 堆的存储方式 堆的创建 堆的向下调整 向下过程(以小堆为例) 向下过程(以大堆为例) 建堆的时间复杂度O(n) 堆的插入与删除 堆的插入 向上调整建堆的时间复杂度O(nlogn) 堆的删除 常见习题 常用接口介绍 PriorityQueue的特性 Pri…

HNU计算机视觉作业一

前言 选修的是蔡mj老师的计算机视觉,上课还是不错的,但是OpenCV可能需要自己学才能完整把作业写出来。由于没有认真学,这门课最后混了80多分,所以下面作业解题过程均为自己写的,并不是标准答案,仅供参考 …

lammps编译(2Aug2023、intel2020、rtx4070ti)

说明: [rootnode101 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootnode101 ~]# gcc -v Using built-in specs. COLLECT_GCCgcc COLLECT_LTO_WRAPPER/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper Target: x86_64-redhat-lin…

双十二哪个牌子的电视盒子好用?测评员总结电视盒子品牌排行榜

每次电商大促我会分享好物推荐,本期我要盘点的数码产品是电视盒子,电视盒子的功能和重要性大家都懂,但电视盒子如何选就不太了解了,我根据今年20多次的测评结果整理了电视盒子品牌排行榜,看看哪个牌子的电视盒子好用吧…

beebox靶场A3 low级别 xss通关教程(二)

六:xss get型 eval 通过观察我们可以发现url地址中存在一个date函数 那我们可以试一下把后面的date()函数去掉,直接写入一个alert(555) 发现直接弹出一个框,证明有xss漏洞 七:xss href 直接进入页面会看到是get方法&#xff0c…

HarmonyOS4.0从零开始的开发教程12给您的应用添加弹窗

HarmonyOS(十)给您的应用添加弹窗 概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种…

【51单片机系列】直流电机使用

本文是关于直流电机使用的相关介绍。 文章目录 一、直流电机介绍二、ULN2003芯片介绍三、在proteus中仿真实现对电机的驱动 51单片机的应用中,电机控制方面的应用也很多。在学习直流电机(PWM)之前,先使用GPIO控制电机的正反转和停止。但不能直接使用GPIO…

飞天使-linux操作的一些技巧与知识点4-ansible常用的技巧,配置等

文章目录 ansible配置文件的优先级尝试开始进行操作ansible常用模块ansible 的playbook示例安装phpplaybook中变量的引用 ansible yum install -y ansible 测试是否可用 ansible localhost -m ping /etc/ansible/ansible.cfg :主配置文件,配置 ansible…

3个好用的桌面管理软件!点赞

大家是不是觉得自己的桌面有时候特别乱、上班的时候会影响自己的心情。尤其是一些大企业,干净整洁的桌面是领导必须的要求。 今天就为大家推荐3款好用的桌面管理软件,这其中有的是适合企业用的,有的是适合个人用的,大家可根据自己…

KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设

项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源,该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年,光伏发电总量达到了百万千瓦时。 大量分布式光伏并网,在输出清洁电力的同时&#xff0c…

全志XR806开发板RTOS环境搭建及问题

测评一 RTOS环境搭建及问题 按照官网文档https://xr806.docs.aw-ol.com/rtos/env/说明,RTOS先拉取SDK,由于XR806是Cortex-M33 Star内核然后指定gcc-arm-none-eabi工具链的位置,再编译再烧录,开发过程和ESP32有些许相似&#xff0c…

深入理解Dubbo-7.服务消费调用源码分析

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

媒介盒子:软文推广让你的品牌宣传更高效

软文推广在当今企业的宣传方式中具有至关重要的作用。随着互联网技术的不断发展和社交媒体的广泛使用,软文推广已经成为品牌和广告主的首选。如何在海量信息中脱颖而出,如何让内容在众多信息中获得更高的点击率与转化率,还需要借助软文推广的…

算法通关村第十八关-黄金挑战回溯困难问题

大家好我是苏麟 , 今天带来几道回溯比较困难的题 . 回溯有很多比较难的问题,这里我们看两个,整体来说这两个只是处理略复杂,还不是最难的问题 . 大纲 IP问题 IP问题 描述 : 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 …

UE5 - ArchvizExplorer与Map Border Collection结合 - 实现电子围栏效果

插件地址: https://www.unrealengine.com/marketplace/zh-CN/product/archviz-explorer https://www.unrealengine.com/marketplace/zh-CN/product/map-border-collection ArchvizExplorer扩展: https://download.csdn.net/download/qq_17523181/8843305…

独热编码和词向量的简单理解

把单词用向量表示,是把深度神经网络语言模型引入自然语言处理领域的一个核心技术。想要让机器理解单词,就必须要把它变成一串数字(向量)。下面介绍的 One-Hot Encoding(One-Hot 编码)和 Word Embedding &am…

【LittleXi】2023 ICPC ECfinal 出线 官方数据 民间预测

【LittleXi】2023 ICPC ECfinal 出线 官方数据 民间预测 说明: 参考去年、前年上海大学,设置210出线队伍 对6场区域赛(不含港澳)走Z字,每个学校最多三支队伍出线 字符串问题,可能会有几个名额失真,比如南…

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-设置输入设备

【项目源码】 包括本篇需要的脚本都打包在项目源码中,可以通过下面链接下载: 【背景】 目前我们能投射到远端浏览器(或者任何其它Peer)的媒体流只有默认的MainCamera画面,其实我们还可以通过配置输入来传输操作输入信息,比如键鼠等。 【追加input processing组件】 …