Redis缓存介绍以及常见缓存问题:穿透、雪崩和击穿

news2024/12/23 6:35:09

概念

缓存就是数据交换的缓冲区(Cache),是存贮数据的临时地方,一般读写性能较高。

作用:

  • 降低后端负载

  • 提高读写效率,降低相应时间

成本:

  • 数据一致性成本

  • 代码维护成本

  • 运维成本

缓存更新策略

内存淘汰超时剔除主动更新
说明不用自己维护,利用redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次 查询时更新缓存给缓存数据添加TTL时间,到期后自动删除缓存,下次查询时更新缓存编写业务 逻辑,在修改数据库的同时,更新缓存
一致性一般
维护成本

应用场景:

  • 低一致性需求:使用redis自带的内存淘汰策略

  • 高一致性需求:主动更新,并以超时剔除作为 兜底方案

    • 读操作:

      • 缓存命中直接返回

      • 缓存未命中则查询数据库,并写入缓存,设定超时时间

    • 写操作

      • 先写数据库,然后再删除缓存

      • 要确保数据库于缓存操作的原子性

缓存穿透

缓存穿透是指客户端请求的 数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打在数据库。

常见解决方案:

  • 缓存空对象

    • 优点:实现简单,维护方便

    • 缺点:

      • 额外的内存消耗

      • 可能造成短期的不一致

  • 布隆过滤

    • 优点:内存占用较少,没有多余key

    • 缺点:

      • 实现复杂

      • 存在误判可能                

缓存雪崩

指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大的压力

解决方案:

  • 给不同的key的ttl添加随机值

  • 利用redis集群提高服务的可用性

  • 给缓存业务添加降级限流策略

  • 给业务添加多级缓存

缓存击穿

缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务叫复杂的key突然失效,无数的请求访问会在瞬间给数据库带来巨大的冲击

 

解决方案:

  • 互斥锁

    • 优点:

      • 没有额外的内存消耗

      • 保证一致性

      • 实现简单

    • 缺点:

      • 线程需要等待,性能受影响

      • 可能有死锁风险

  • 逻辑过期

    • 优点:线程无需等待,性能较好

    • 缺点:

      • 不保证一致性

      • 有额外内存消耗

      • 实现复杂

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

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

相关文章

使用pyqt编写的页面导航框架

使用pyqt编写的页面导航框架 效果 介绍代码 效果 介绍 使用pyqt多种控件编写的导航框架,左边是菜单栏,点击不同的菜单选项可以切换到不同的页面。 代码 import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QP…

微服务之分布式理论zookeeper概述

一、分布式技术相关的理论 CAP理论 CAP定理(CAP theorem),⼜被称作布鲁尔定理(Eric Brewer),1998年第⼀次提出. 最初提出是指分布式数据存储不可能同时提供以下三种保证中的两种以上: (1) ⼀致性(Consistency): 每次读取收到的信息都是最新的; (2) …

Leetcode—1329. 将矩阵按对角线排序【中等】(unordered_map、priority_queue)

2024每日刷题&#xff08;121&#xff09; Leetcode—1329. 将矩阵按对角线排序 实现代码 class Solution { public:vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {const int m mat.size();const int n mat[0].size();unorder…

(51单片机)第十三章-STC系列51单片机功能介绍

13.1 单片机空闲与掉电模式的应用 1. 空闲模式 当单片机进入空闲模式时&#xff0c;除CPU处于休眠状态外&#xff0c;其余硬件全部处于活动状态&#xff0c;芯片中程序未涉及的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。假若定时器正在运行&#xff0c;…

【tcl脚本实践Demo 1】文本生成、匹配、修改、读写

引言 在芯片设计的流程中,各种EDA工具在设计、综合、布局布线、验证、时序分析等等环节都会产出大量的文件信息。这些信息是海量的,如果单纯靠程序员自己查看信息效率很低并且很容易纰漏。所以脚本语言可以很好的解决这个问题,可以利用脚本语言匹配到敏感的信息,完成对信息…

C++ 如何实现原子性

1.操作系统如何实现原子性 在单处理器,单核,运行多线程的情况下,我们不使用线程同步工具, 我们会出现,线程之间会互相抢夺,临界区的资源,造成数据不符合我们预期的结果, 后面再说解决办法,那么我们怎么帮助实现原子性 1 屏蔽中断,不让线程之间切换,让它完成再切换 2 底层硬…

算法设计与分析 3.2 牛顿法及改进、迭代法、矩阵谱半径、雅可比迭代、高斯迭代

思考题1 改进cosx&#xff1f;优化算法 关键点在于cos计算过于麻烦&#xff0c;而每次都要求sinx的值 故直接简化为cosx的导数 -sinx 即&#xff1a; 原&#xff1a;//double daoshu(double x) { // return 18 * x - cos(x); //} 改&#xff1a;double daoshu(double x) {retu…

基于ssm+vue开放式教学评价管理系统【ppt·代码·文档报告】

项目演示视频 项目名称&#xff1a;开放式教学评价管理系统 系统介绍&#xff1a;本系统是通过java的SSM框架来实现的&#xff0c;前端采用vue框架进行实现 管理员通过登录进入到系统操作界面&#xff0c;结合需求可以对个人信息进行在线修改维护&#xff0c;也可结合需求进行…

深入剖析Redis哨兵模式的原理和应用

【更多精彩内容,欢迎关注小米的微信公众号“软件求生”】 大家好,我是小米!今天我们来聊一聊Redis中一个非常重要的话题——哨兵模式。相信大家在使用Redis时一定遇到过一些分布式系统的问题,而哨兵模式正是解决这些问题的关键之一。让我们一起来深入了解一下哨兵模式的原…

Notion是什么,Notion软件下载,Notion官方网站在哪里?国内用户Notion怎么订阅升级会员?

Notion是什么 Notion&#xff0c;一款强大的多功能工具&#xff0c;可用于组织笔记、任务、项目、数据库和文档等。 Notion软件下载 这个到Notion官方网站下载就可以了。 怎么订阅Notion会员 注册好了Notion的账号&#xff0c;来到首页&#xff0c;点击设置&#xff0c;左边…

13.Blender 界面介绍(下) 雕刻、纹理绘制及属性

界面介绍 1. 布局 物体的移动旋转和缩放等操作 2. 建模 里面就是有一些建模常用的功能 里面的功能对于做MMD来说不是必备的操作 3. 雕刻 使用里面的工具可以对物体本身进行修改 4. UV编辑 如果想要编辑UV贴图 将编辑模式改为纹理绘制 再点击右边的工具 如果进行编…

WordPress缓存插件有哪些?好用的缓存插件分享

目前WordPress缓存插件有&#xff1a;WP Rocket、WP Super Cache、W3 Total Cache、Sucuri、NitroPack、SiteGround Optimizer、LiteSpeed Cache、WP-Optimize、Hummingbird、Cache Enabler、Comet Cache。 在当今的数字世界中&#xff0c;拥有一个高效的网站对于吸引和留住用…

刷机维修进阶教程-----红米note7 修复基带 更改参数 nv损坏故障 实例步骤操作解析

在前面的博文中我有说过。不管刷更改参数还是修复基带,尽可能的情况下备份一些主要分区,上期讲了小米6x 小米5 小米6这些机型更改参数的具体步骤。今天的教程以红米note7为例解析下改参数和修复nv损坏的具体步骤,两者操作实际没有什么冲突。有兴趣的友友建议多看下我关于…

10GMAC层设计系列-(1)10G Ethernet PCS/PMA

一、引言 对于10G以太网MAC层的实现&#xff0c;Xilinx提供了 3种IP核&#xff0c;分别是 10G Ethernet MAC、10G Ethernet PCS/PMA、10G Ethernet Subsystem。 10G Ethernet MAC只包含MAC层&#xff0c;外部需要提供一个PHY芯片进行数据对齐&#xff0c;10G Ethernet MAC与P…

Hadoop之路---伪分布式环境搭建

hadoop更适合在liunx环境下运行&#xff0c;会节省后期很多麻烦&#xff0c;而用虚拟器就太占主机内存了&#xff0c;因此后面我们将把hadoop安装到wsl后进行学习,后续学习的环境是Ubuntu-16.04 &#xff08;windows上如何安装wsl&#xff09; 千万强调&#xff0c;创建完hado…

管理十大定律:深入解析与实战应用

在复杂多变的管理实践中&#xff0c;管理者面临着无数的挑战和机遇。为了成功应对这些挑战并抓住机遇&#xff0c;管理者需要掌握一系列有效的管理定律和原则&#xff0c;帮助管理者更好地把握管理精髓&#xff0c;提升组织效能。 1、手表定律&#xff1a;明确目标&#xff0…

STM32 实时时钟(RTC)

必要知识&#xff1a; 1、Unix时间戳 2、time.h localtime()&#xff1a;将秒寄存器的值转化为当地时间 mktime()&#xff1a;将指向的结构体转化为自1970年1月1日的秒数 注&#xff1a;在STM32中两函数换算出的时间均是0时区伦敦时间 一、BKP&#xff08;Backup Registers&…

将阿里云中数据传输到其他超算服务器

目录 方法一&#xff1a;在阿里云中连接超算&#xff0c;然后使用rsync&#xff08;速度慢&#xff09; 方法2&#xff1a;rclone(速度很快&#xff0c;100G只花了大约20min) 方法一&#xff1a;在阿里云中连接超算&#xff0c;然后使用rsync/scp&#xff08;速度慢&#xff0…

【数据结构】带环链表(详解+拓展)

一.题目 在链表相关题目中&#xff0c;有一道非常经典的题目&#xff1a;带环链表(链接&#xff1a;141. 环形链表 - 力扣&#xff08;LeetCode&#xff09;&#xff09;。带环链表尾节点的next指针指向其他节点&#xff0c;因此遍历一个带环链表将是一个死循环&#xff0c;这…

系统架构师复习材料总结---计算机软考

系统架构师复习材料总结 1、嵌入式指令集 2、逆向工程 3、自顶向下 4、数据库开发 5、软件架构 1 1 1 1 1 1 1 6、分布式系统 7、架构评价 8、构建复用 9、特定领域软件架构 10、面向对象分析模型 11、设计模式 12、项目变更 13、中间件开发 14、网络安全 15、电子商务…