正常处理流程

  客户端请求正常的时候,先读缓存,如果数据命中,则返回缓存的值;否则,把从存储层中读取出来的数据缓存至缓存,同时返回客户端。但是,为了保证系统高可用和高性能,设计一个缓存系统时必须考虑的要素包括缓存穿透、缓存击穿、缓存雪崩和缓存并发等。这里,小编给大家简明扼要地综述一下它们的基本概念和解决策略。

缓存穿透

  基本概念:客户端访问缓存和数据库中都没有的数据,如果系统不对其缓存,就出现了缓存穿透。流量大时会导致存储层挂掉。

  简述:缓存中不存在的数据洪水猛兽般袭来,访问穿透到存储层。

  解决方案:

  • 缓存空对象。

    对于未命中缓存和存储层的数据,设置默认值和五分钟左右的有效期(有效期根据业务需要设置)。

  • 使用布隆过滤器。

缓存击穿

  基本概念:一个缓存key是热点数据,在不停的扛着大并发,但过期那一刻持续的大并发就穿破缓存,导致存储层请求量瞬间飙高。

  解决方案:

  • 使用互斥锁。

    在发现缓存失效的时候(判断拿出来的值为空),不是立即去请求DB,而是成功添加互斥锁后再请求DB并回设缓存;否则,就重试查询缓存的方法。

  • 提前使用互斥锁。

    在value内部设置1个超时标签(timeout1),当从cache读取到timeout1发现它已经过期的时候,马上延长timeout1并重新设置到cache,然后再从数据库加载数据并设置到cache中。

  缓存击穿和缓存雪崩的区别在于前者针对某一个key,缓存雪崩则是针对很多key。缓存key在某个时间点过期的时候,恰好有大量的并发请求过来,这些请求发现缓存过期就从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

缓存雪崩

  基本概念:缓存服务器某个节点宕机或断网或者在某一个时间段大量缓存集体失效,请求全部转发到DB,DB压力骤增而引起雪崩。

  解决方案:

  • 使缓存过期时间呈泊松分布。

  • 开启缓存过期事件监听和异步更新策略。

    监听到缓存过期时,异步起一个线程去读数据库,更新缓存。

    修改Redis配置文件,开启过期事件监听:使notify-keyspace-events的值为Ex

缓存并发

  基本概念:多个redis的client同时set key引起的并发问题。其实redis自身就是单线程操作,多个client并发操作,按照先到先执行的原则,先到的先执行,其余的阻塞。当然,另外的解决方案是把set操作放在队列中使其串行化,必须一个一个的执行。

Reference

https://baijiahao.baidu.com/s?id=1655304940308056733&wfr=spider&for=pc

Redis实战-缓存穿透、缓存雪崩、缓存击穿和缓存并发的区别和解决方案的更多相关文章

  1. 缓存穿透、雪崩、热点与Redis

    (拼多多问:Redis雪崩解决办法) 导读:互联网系统中不可避免要大量用到缓存,在缓存的使用过程中,架构师需要注意哪些问题?本文以 Redis 为例,详细探讨了最关键的 3 个问题. 一.缓存穿透预防 ...

  2. Redis缓存穿透和雪崩

    缓存穿透 用户想要查询一个数据 在redis缓存数据库中没有获取到 就会向后端的数据库中查询. 当用户很多 都去访问后端数据库的话,这就会给数据库带来很大的压力. 常见场景:秒杀活动 等 解决方法: ...

  3. Redis系列(八)--缓存穿透、雪崩、更新策略

    1.缓存更新策略 1.LRU/LFU/FIFO算法剔除:例如maxmemory-policy 2.超时剔除,过期时间expire,对于一些用户可以容忍延时更新的数据,例如文章简介内容改了几个字 3.主 ...

  4. 深入了解Redis(7)-缓存穿透,雪崩,击穿

    redis作为一个内存数据库,在生产环境中使用会遇到许多问题,特别是像电商系统用来存储热点数据,容易出现缓存穿透,雪崩,击穿等问题.所以实际运用中需要做好前期处理工作. 一.缓存雪崩 1.概念 缓存雪 ...

  5. SpringBoot微服务电商项目开发实战 --- Redis缓存雪崩、缓存穿透、缓存击穿防范

    最近已经推出了好几篇SpringBoot+Dubbo+Redis+Kafka实现电商的文章,今天再次回到分布式微服务项目中来,在开始写今天的系列五文章之前,我先回顾下前面的内容. 系列(一):主要说了 ...

  6. Redis中几个简单的概念:缓存穿透/击穿/雪崩,别再被吓唬了

    Redis中几个“看似”高大上的概念,经常有人提到,某些好事者喜欢死扣概念,实战没多少,嘴巴里冒出来的全是高大上的名词,个人一向鄙视概念党,呵呵! 其实这几个概念:缓存穿透/缓存击穿/缓存雪崩,有一个 ...

  7. Redis详解(十二)------ 缓存穿透、缓存击穿、缓存雪崩

    本篇博客我们来介绍Redis使用过程中需要注意的三种问题:缓存穿透.缓存击穿.缓存雪崩. 1.缓存穿透 一.概念 缓存穿透:缓存和数据库中都没有的数据,可用户还是源源不断的发起请求,导致每次请求都会到 ...

  8. NoSQL & Redis 介绍、缓存穿透 & 击穿 & 雪崩

    1. NoSql 简介 2. Redis 简介 2.1 Redis 的起源 2.2 缓存过期 & 缓存淘汰 3. 缓存异常 1)缓存穿透 2)缓存击穿 3)缓存雪崩 4)总结 1. NoSQL ...

  9. Redis 面试常见问题———缓存雪崩、缓存击穿以及缓存穿透

    在开发中会面临缓存异常可能会出现三个问题,分别是缓存雪崩.缓存击穿和缓存穿透.这三个问题会导致大量请求从缓存转移到数据库,如果请求的并发量很大的话,就会导致数据库崩溃.所以在面试官也会经常问这些问题. ...

  10. Redis缓存穿透、缓存击穿以及缓存雪崩

    作为一个内存数据库,redis也总是免不了有各种各样的问题,这篇文章主要是针对其中三个问题进行讲解:缓存穿透.缓存击穿和缓存雪崩.并给出一些解决方案.这三个问题是基本问题也是面试常问问题. 这篇文章我 ...

随机推荐

  1. FastAPI 表单参数与文件上传完全指南:从基础到高级实战 🚀

    title: FastAPI 表单参数与文件上传完全指南:从基础到高级实战 date: 2025/3/8 updated: 2025/3/8 author: cmdragon excerpt: 本教程 ...

  2. 0基础的人关于C++多态产生的一系列疑问

    之前在面试的时候被问过懂不懂C++,懂不懂"多态".我之前搞科研一直在用Python,不会C++.完全没听过"多态"这个词,只听说过"多模态" ...

  3. 🧠ChatGPT 中文提示语大全【超全 Prompt 用法】- 已分类

    基于 awesome-chatgpt-prompts 进行分类,更方便查找自己所需,炼制适合自己的ChatGPT法宝. 工作 简历写手 我需要你写一份<2年工作经验的前端工程师>的简历,你 ...

  4. SpringBoot集成亚马逊的S3对象存储

    依赖导入:aws-java-sdk-s3 <dependencyManagement> <dependencies> <dependency> <groupI ...

  5. Delphi 中拖动无边框窗口的5种方法

    1.MouseMove事件中加入: // ReleaseCapture; // Perform(WM_SYSCOMMAND, $F017 , 0); 2.MouseDown事件中加入: // POST ...

  6. 元模型:开启AI哲学思考的数字奇点

    为推广动态模型让AI写的.动态模型和AI非常契合,元模型对AI有意义,所以让AI写更好.元模型其实是非常简单的一个模型,使用XML表示代码如下. <thing name="thing& ...

  7. windows 本地部署DeepSeek

    一:前言: 那么为什么要本地部署,主要就是企业或者个人为了数据安全和防止受限网络等其 数据安全:数据不用上传到外面,在本地处理,不用担心数据泄露,像金融.医疗这些对数据安全要求高的行业特别需要. 功能 ...

  8. leetcode每日一题:最大或值

    题目 2680. 最大或值 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k .每一次操作中,你可以选择一个数并将它乘 2 . 你最多可以进行 k 次操作,请你返回 nums[ ...

  9. MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题

    MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题 问题背景 在停服发版更新时,需对 200GB 大表(约 200 亿行数据)进行快速备份以预防操作失误. 因为曾经出现过有开发写的发 ...

  10. DeepSeekV3:写代码很强了

    以前,我是不信AI能最先替代程序员的. DeepSeek的热度虽然在降,但是能力在悄摸的迭代. 在今年2月中旬测试DeepSeekR1的时候,虽然被它的文本处理能力惊艳到,但是当时吐槽过几句它的编程水 ...