缓存穿透、缓存雪崩、缓存击穿的区别

缓存三兄弟(穿透、雪崩、击穿)

缓存穿透

定义

查询一个redis和数据库都不存在的值,数据库不存在则不会将数据写入缓存,所以这些请求每次都达到数据库。

解决办法是缓存空对象,如果数据库不存在则将空对象存入缓存,下次再访问直接返回空值,但是如果突然新增了这么一个值到数据库,此时又会造成数据不一致,所以还有另一种解决办法,布隆过滤,简单来说就是在请求和redis之间添加一层布隆过滤器即以bit为单位的数组,数值均为0,预热缓存的同时预热布隆过滤器,每次新增值的时候都会根据id计算出3个hash值,将hash值对应的索引处的数值设置为1,这样请求会先到达布隆过滤器,如果对应的hash值均为1,则继续查询redis,否则直接返回。但是也存在一个问题,一个确实不存在的值计算出来的hash值正好和已存在的值所计算出来的hash值重叠,会导致误判,可以增加hash函数的数量和数组的大小降低误判率。

解决办法
缓存空对象

布隆过滤

缓存击穿

定义

一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求会在瞬间给数据库带来巨大的冲击。

解决方案是互斥锁,查询缓存失败后,获取锁,然后重建缓存成功后,释放锁。当重建缓存时有别的线程也查询缓存失败,也来获取锁,但此时锁还没被释放,所以获取锁失败,休眠一段时间后再次查询缓存,直到缓存命中。一致性高,但是性能差,相当于mysql事务隔离等级中的串行化,一直要等直到另一个线程释放锁。所以还有一种解决办法,逻辑过期,redis中的热点key不设置过期时间,而是新增一个字段expire,表示逻辑过期时间,当有线程访问该key时,判断是否逻辑过期,如果过期则获取锁,开启新线程去重建缓存并重置逻辑过期时间,然后释放锁,无需等待新线程释放锁,直接返回旧数据。如果有别的线程获取锁失败,说明已经有线程在重建锁了,也直接返回旧数据。性能高,但一致性差。

解决方案
互斥锁
逻辑过期

缓存雪崩

定义

在同一时间段内大量缓存key同时失效或redis宕机,导致大量请求到达数据库。

解决方案

解决办法就是给不同的key添加TTL随机值,或者利用redis的集群模式和哨兵模式提高redis的高可用性,或者利用nginx和gateway做降级限流,或者给业务添加多级缓存。

 总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python数据结构与算法——算法(贪心算法、动态规划

贪心算法 介绍:贪心算法又称贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解。 贪心算法并不保证会得到最优解,但…

qemu源码解析(基于qemu9.0.0)

简介 QEMU是一个开源的虚拟化软件,它能够模拟各种硬件设备,支持多种虚拟化技术,如TCG、Xen、KVM等 TCG 是 QEMU 中的一个组件,它可以将高级语言编写的代码(例如 C 代码)转换为可在虚拟机中执行的低级代码…

InternlM2

第一次作业 基础作业 进阶作业 1. hugging face下载 2. 部署 首先,从github上git clone仓库 https://github.com/InternLM/InternLM-XComposer.git然后里面的指引安装环境

Day21_学点儿JavaEE__过滤器Filter(登录验证、编码处理)

1 为什么要使用过滤器 昨天已经总结过 当然,这仅仅是完成了一个简单的登录过程,即完成判断输入信息是否和数据库信息相匹配的操作,但是仍然可以通过直接输入地址的方式,在不登录的情况下访问相应的页面。而我们实际生活中的没登录…

ASUS华硕ROG幻16Air笔记本电脑GU605M原装出厂Win11系统工厂包下载,带有ASUSRecovery一键重置还原

适用型号:GU605MI、GU605MY、GU605MZ、GU605MV、GU605MU 链接:https://pan.baidu.com/s/1YBmZZbTKpIu883jYCS9KfA?pwd9jd4 提取码:9jd4 华硕原厂Windows11系统带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性联机支持…

谷歌查问题

1,打开 it工具箱-里面啥都有 2,找到谷歌 3,访问gpt

跟TED演讲学英文:The next grand challenge for AI by Jim Fan

The next grand challenge for AI Link: https://www.ted.com/talks/jim_fan_the_next_grand_challenge_for_ai? Speaker: Jim Fan Date: October 2023 文章目录 The next grand challenge for AIIntroductionVocabularyTranscriptSummary后记 Introduction Researcher Jim…

深入理解MD5算法:原理、应用与安全

title: 深入理解MD5算法:原理、应用与安全 date: 2024/4/11 20:55:57 updated: 2024/4/11 20:55:57 tags: MD5算法数据安全哈希函数摘要算法安全漏洞SHA算法密码学 第一章:引言 导言 在当今数字化时代,数据安全和完整性变得至关重要。消息…

PHP婚恋小程序开发源码支持微信+公众号+APP

随着社会的发展和人们生活节奏的加快,传统的相亲方式已经不能满足现代人的需求。在此背景下,有人想到通过线上小程序的方式来满足更多的人进行相亲,所以在此情况下,婚恋相亲小程序由此出现。婚恋相亲小程序的功能有会员功能&#…

Postman接口测试工具

Postman接口测试工具 目录 Postman接口测试工具安装页面概述保存任务发送请求 安装 PostMan官方下载网址:https://www.getpostman.com/downloads/ 页面概述 保存任务 新建请求集合 命名为test 将刚刚的任务保存 选择新建的test集合 发送请求 新建窗口 request请…

解决源 “MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。

源 “MySQL 8.0 Community Server” 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 失败的软件包是:mysql-community-server-8.0.31-1.el7.x86_64 GPG 密钥配置为:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql…

vue源码解析——v-if和v-for哪个优先级高,如何避免两者同时使用

首先,官方不推荐v-if和v-for在同一个元素上使用。其次,如果两者同时使用,v-if和v-for的优先级怎么确定?在vue2和vue3中这两者的优先级顺序不一样。vue2是v-for优先,条件不存在时也会渲染多个注释节点。在vue3中进行了改…

JVM 垃圾收集器

JVM 垃圾收集器 垃圾收集器 垃圾收集器 Serial (串行):单线程垃圾回收器;采用复制算法 Serial Old:Serial 收集器的老年代版本,采用标记-整理算法。 ParNew:多线程的垃圾回收器(Serial 的多线程版本&#x…

推荐一个大学生可以参加的榜单赛事|人工智能赛道

【榜单赛事】第十四届全国大学生计算机应用能力与数字素养大赛 - 人工智能产业应用赛道人工智能编程赛项 正在火热报名中 本赛道定位于人工智能产业应用和实践,把人工智能产业真实的技能要求、能力要求体现在竞赛内容设计当中,并在竞赛环节融入实战项目…

SQLite Android 绑定(十八)

返回:SQLite—系列文章目录 上一篇:SQLite 在Android安装与定制方案(十七) 下一篇:SQLite—系列文章目录 ​ 应用程序编程 加载共享库 在使用任何与 SQLite 相关的方法或对象之前,本机 SQLite 必…

H5:canvas刮刮乐

今日无事&#xff0c;写一个刮刮乐用于收割亲弟弟零花钱 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Title</title><style>body {height: 100vh;background-color: #fff;}.textDiv {…

数学之光照亮AI之路:探究数学背景在人工智能学习中的优势

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已成为引领未来发展的重要力量。然而&#xff0c;对于许多初涉此领域的学习者来说&#xff0c;AI的复杂性和深度常常让他们望而却步。有趣的是&#xff0c;那些数学基础扎实的人在学习AI时&#xff0c;往往…

2024 Android Studio安装及配置gradle快速省心搭建,不放C盘,前置搭建

题外话&#xff1a;要做安卓项目然后安装过Android Studio的朋友都知道&#xff0c;下载安装完成之后并不能直接开始你的第一个安卓项目的“ Hello World”&#xff0c;其中有要配置好gradle&#xff0c;在你测试好环境之前你会遇到很多问题&#xff0c;同时默认下使用中所需依…

Redis从入门到精通(十二)Redis实战(九)GEO查询附近商户、BitMap用户签到和统计、HLL的UV统计

↑↑↑请在文章开头处下载测试项目源代码↑↑↑ 文章目录 前言4.10 附近商户4.10.1 GEO介绍4.10.2 附近商户需求分析4.10.3 实现新增商户功能4.10.4 实现查询附近商户功能 4.11 用户签到4.11.1 用户签到需求分析4.11.2 BitMap介绍4.11.3 实现用户签到4.11.4 实现用户签到统计4.…

备战蓝桥杯---数学刷题3

话不多说&#xff0c;直接看题&#xff1a; 1. 我们可以得到大致一个思路&#xff0c;就是先枚举1-1e6的质数&#xff0c;然后看看有几个即可。 我们怎么知道个数呢&#xff1f; 首先我们知道1---n中有n/p的下取整个为p的倍数。 因此&#xff0c;p的个数至少是n/p的下取整个…