4.18---缓存相关问题(操作原子性,击穿,穿透,雪崩,redis优势)
为什么要用redis做一层缓存,相比直接查mysql有什么优势?
首先介绍Mysql自带缓存机制的问题:
MySQL 的缓存机制存在一些限制和问题,它自身带的缓存功能Query Cache只能缓存完全相同的查询语句,对于稍有不同的查询语句,即使查询的是相同的数据,也无法命中缓存。而且数据库中数据发生变化时,也不会自动更新;此外Query Cache 的缓存命中率也会受到并发访问的影响,当多个并发查询同时访问同一个数据时,可能会导致缓存的命中率下降。
然后介绍相比起MySQL ,redis缓存的一些优势:
1.数据类型丰富
Redis 支持多种数据类型,包括字符串、哈希、列表、集合和有序集合等。多种数据类型可以保证它能实现更多功能(例如排序)
2.可以内存管理
Redis 将所有数据存储在内存中,因此读写速度非常快。同时,Redis 也提供了一些内存管理的功能,例如可以设置数据的过期时间,当数据过期时会自动从内存中删除。避免浪费内存资源。
3.支持高并发
Redis 是单线程的,通过使用事件驱动的方式处理客户端请求。单线程模型,可以避免了多线程之间的竞争,省去了多线程切换带来的时间和性能上的开销,也不会导致死锁
4.支持持久化
Redis 提供了两种持久化方式,分别是 RDB(Redis Database)和 AOF(Append Only File)。RDB 是将内存中的数据定期保存到磁盘上,而 AOF 则是将每个写操作追加到文件中。这两种方式可以保证数据的持久化,即使 Redis 重启或崩溃,也可以通过加载持久化文件来恢复数据。
如何保证缓存与数据库的操作的同时成功或失败?
1.双写模式(Cache-Aside Pattern)
先更新数据库,再删除缓存
如果缓存删除失败,可以通过重试机制或异步队列处理
2. 事务消息
使用支持事务的消息队列(如RocketMQ),将缓存操作作为事务的一部分。只有数据库操作成功后,才会提交缓存操作
3. 数据库binlog监听
使用Canal、Debezium等工具监听数据库binlog,将变更事件同步到缓存,确保最终一致性。
缓存穿透、缓存击穿、缓存雪崩,什么是缓存xx?如何解决这个问题?这几个解决方案各自的优势和缺点分别是什么?
缓存穿透
介绍:
指客户端请求的数据在缓存和数据库中都不存在,缓存永远不会生效,请求都会打到数据库。
解决方案:
| 方案 | 介绍 | 优点 | 缺点 |
| 缓存空对象 | 对查询结果为null的key也进行缓存 | 实现简单 | 可能缓存大量无效数据 |
| 布隆过滤器 | 底层是一个二进制数组,进行哈希映射。(数据key先访问布隆滤波器,不存在直接返回,存在进入redis) | 空间效率高 | 存在误判的情况。(哈希冲突) 存在数据更新问题。(数据库更新要同步更新布隆过滤器) |
| 数据校验 | 加强用户id校验;做好数据的基础格式校验 | 轻量级 | 防御范围有限 |
| 热点参数限流 | 能力有限 |
缓存雪崩
介绍:
同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。
解决方案:
| 方案 | 介绍 | 优点 | 缺点 |
| 错开过期时间 | 给不同的Key的TTL(过期时间)添加随机值 | 简单 | 无法应对宕机 |
| 多级缓存 | 本地缓存+分布式缓存 | 可靠性高 | 成本高 |
| 熔断降级 | 缓存不可用时启用降级策略 | 保护系统 | 影响用户体验(因为一直返回默认信息) |
| 集群部署 | Redis集群保证高可用 |
缓存击穿
介绍:
热点Key问题的特殊情况,一个被高并发访问并且缓存重建业务较复杂的key突然失效了(过期时间),无数请求都无法从缓存中获取数值转而都开始访问数据库。
解决方案:
| 方案 | 介绍 | 优点 | 缺点 |
| 互斥锁 | 线程并行访问会崩溃的话就把访问变成串行,tryLock+double check实现 | 没有额外内存消耗 保证一致性 实现简单 | 可能性能瓶颈 可能死锁 |
| 逻辑过期 | 将过期时间设置到redis的value中,线程1查缓存,通过value判断出来已过期,获得锁,然后开启新线程进行缓存数据重建以及重新设置过期时间。期间有其他线程访问缓存数据只会返回过期数据。 | 线程无需等待 性能较好 | 不保证一致性 有额外内存消耗(新线程) 实现较复杂 |
相关文章:
4.18---缓存相关问题(操作原子性,击穿,穿透,雪崩,redis优势)
为什么要用redis做一层缓存,相比直接查mysql有什么优势? 首先介绍Mysql自带缓存机制的问题: MySQL 的缓存机制存在一些限制和问题,它自身带的缓存功能Query Cache只能缓存完全相同的查询语句,对于稍有不同的查询语句,…...
java八股之并发编程
1.java线程和操作系统线程之间的区别? 现在java线程本质上是操作系统线程,java中采用的是一对一的线程模型(一个用户线程对应一个内核进程) 2.什么是进程和线程? 1.进程是操作系统一次执行,资源分配和调度的…...
C#/.NET/.NET Core拾遗补漏合集(25年4月更新)
前言 在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。 ✍C#/.NET/.N…...
层次式架构核心:中间层的功能、优势与技术选型全解析
层次式架构中的中间层是整个架构的核心枢纽,承担着多种重要职责,在功能实现、优势体现以及技术选型等方面都有丰富的内容,以下为你详细介绍: 一、功能 1.业务逻辑处理 复杂规则运算:在许多企业级应用中,…...
PDF.js 生态中如何处理“添加注释\添加批注”以及 annotations.contents 属性
我们来详细解释一下在 PDF.js 生态中如何处理“添加注释”以及 annotations.contents 属性。 核心要点:PDF.js 本身主要是阅读器,不是编辑器 首先,最重要的一点是:PDF.js 的核心库 (pdfjs-dist) 主要设计用于解析和渲染…...
MySQL性能调优(三):MySQL中的系统库(简介、performance_schema)
文章目录 MySQL性能调优数据库设计优化查询优化配置参数调整硬件优化 1.MySQL中的系统库1.1.系统库简介1.2.performance_schema1.2.1.什么是performance_schema1.2.2.performance_schema使用1.2.3.检查当前数据库版本是否支持1.2.4.performance_schema表的分类1.2.5.performanc…...
【Python语言基础】22、异常处理
文章目录 1. 异常1.1 简介1.2 为什么需要异常处理 2. 基本语法2.1 各部分详解 3. 异常处理流程3.1 执行try代码块3.2 异常发生检查3.3 异常捕获与匹配3.4 执行匹配的 except 代码块3.5 执行 else 代码块(可选)3.6 执行 finally 代码块(可选&a…...
印度zj游戏出海代投本土网盟广告核心优势
印度游戏出海代投本土网盟广告的核心优势包括: 本土化广告策略:针对印度市场的特点,定制本土化的广告策略,吸引更多印度用户的关注和参与。 深度了解印度市场:对印度文化、消费习惯、网络使用习惯等有深入了解&#x…...
NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)
约数和倍数 如果a 除以b 没有余数,那么a 就是b 的倍数,b 就是a 的约数,记作b ∣ a 。 约数,也称因数。 最⼤公约数和最⼩公倍数 最⼤公约数Greatest Common Divisor,常缩写为gcd。 ⼀组整数的公约数,是…...
《软件设计师》复习笔记(11.6)——系统转换、系统维护、系统评价
目录 一、遗留系统(Legacy System) 定义: 特点: 演化策略(基于价值与技术评估): 高水平 - 低价值: 高水平 - 高价值: 低水平 - 低价值: 低水平 - 高价…...
ROS机器人一般用哪些传感器?
以下是ROS机器人常用传感器的分层详解及思维导图总结,涵盖传感器分类、核心参数、ROS支持及典型应用: 一、环境感知传感器 1. 视觉传感器 类型 原理 ROS支持 数据类型 典型型号/驱动 优缺点及应用场景 单目摄像头 单镜头成像,通过透视变换获取2D图像,依赖算法推断深度 驱…...
嵌入式linux架构理解(宏观理解)6ull学习心得---从架构理解到自写程序运行及自写程序开机自启动
一、linux系统的三个组成部分 U-Boot、Linux kernel 和 rootfs 这三者一起构成了一个完整的 Linux 系 统,一个可以正常使用、功能完善的 Linux 系统。 1.在移植 Linux之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动 Linux 内核,bootloader有很多,常…...
人像面部关键点检测
此工作为本人近期做人脸情绪识别,CBAM模块前是否能加人脸关键点检测而做的尝试。由于创新点不是在于检测点的标注,而是CBAM的改进,因此,只是借用了现成库Dilb与cv2进行。 首先,下载人脸关键点预测模型:Index of /file…...
面试算法高频08-动态规划-02
动态规划练习题 题目描述 给定两个字符串 text1 和 text2,要求返回这两个字符串的最长公共子序列。例如对于字符串 “ABAZDC” 和 “BACBAD”,需找出它们最长的公共子序列。子序列是指在不改变其余字符相对位置的情况下,从原始字符串中删除…...
PyTorch逻辑回归总结
目录 PyTorch逻辑回归总结神经网络基础基本结构学习路径 线性回归简单线性回归多元线性回归 逻辑回归核心原理损失函数 梯度下降法基本思想关键公式学习率影响 PyTorch实现数据准备模型构建代码优化 核心概念对比 PyTorch逻辑回归总结 神经网络基础 基本结构 输入节点隐藏节…...
使用 Vue 开发登录页面的完整指南
一、项目搭建与基础配置 环境准备 使用 Vue CLI 或 Vite 创建项目,推荐组合:Vue3 Element Plus Vue Router npm create vuelatest npm install element-plus element-plus/icons-vue vue-router 全局配置(main.js) import { c…...
EDID结构
EDID DDC通讯中传输显示设备数据 VGA , DVI 的EDID由128字节组成,hdmi的EDID增加扩展块128字节。扩展快的内容主要是和音频属性相关的,DVI和vga没有音频,hdmi自带音频,扩展快数据规范按照cea-861x标准。 Edid为了让pc或其他的图像…...
文件包含(详解)
文件包含漏洞是一种常见的Web安全漏洞,其核心在于应用程序未对用户控制的文件路径或文件名进行严格过滤,导致攻击者能够包含并执行任意文件(包括本地或远程恶意文件)。 1. 文件包含原理 动态文件包含机制 开发者使用动态包含函数…...
《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》
🌟 大家好,我是摘星! 🌟 今天为大家带来的是Scheduled和Quartz对比分析: 新手常见困惑: 刚学SpringBoot时,我发现用Scheduled写定时任务特别简单。但当我看到同事在项目里用Quartz时&…...
安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器
打开 PowerShellfvm安装 dart pub global activate fvm安装完成后,如果显示FVM无法识别,那么需要去添加环境变量path添加这个:C:\Users\Administrator\AppData\Local\Pub\Cache\bin 常用命令 fvm releases 查看用户可以装的flutter版本fvm l…...
UNION和UNION ALL的主要区别
UNION和UNION ALL的主要区别在于处理重复数据和排序的方式。 UNION和UNION ALL都是SQL语言中用于合并两个或多个SELECT语句结果集的关键字。它们的主要区别如下: 1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,而UNION ALL不会…...
Kafka系列之:计算kafka集群topic占的存储大小
Kafka系列之:计算kafka集群topic占的存储大小 topic存储数据格式统计topic存储大小定时统计topic存储大小topic存储数据格式 单位是字节大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336计算topic存储大小脚本逻辑是: 计算指定目录或文件的大小…...
[密码学实战]Java使用Bouncy Castle实现Base64编码解码:完整指南
Java使用Bouncy Castle实现Base64编码解码:完整指南 摘要 本文将深入讲解如何通过Bouncy Castle(BC)加密库实现Base64编码解码,包含核心API使用、流式处理、与加密算法集成三大实战场景,提供5种代码实现方案和3种性能优化技巧。 一、Base64基础原理 1.1 编码机制 Bas…...
智谱AI大模型免费开放:开启AI创作新时代
文章摘要:近日,国内领先的人工智能公司智谱AI宣布旗下多款大模型服务免费开放,这一举措标志着大模型技术正式迈入普惠阶段。本文将详细介绍智谱AI此次开放的GLM-4 等大模型,涵盖其主要功能、技术特点、使用步骤以及应用场景&#…...
为什么要给单片机植入操作系统
给单片机植入操作系统(通常是实时操作系统,RTOS)主要是为了在资源有限的环境中实现更高效、更可靠的多任务管理和系统调度。以下是主要原因和优势: 1. 多任务并行处理 背景:单片机通常需要同时处理多个任务࿰…...
T1结构像+RS-fMRI影像处理过程记录(数据下载+Matlab工具箱+数据处理)
最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的路线可行性。就此机会记录下来。 为了完成验证目标处理,首先需要有数据,然后需要准备对应的处理平台和工具箱,进行一系列。那么开始记录~ 前言: 为了基于种子点的功能连…...
【前端基础】--- HTML
个人主页 : 9ilk 专栏 : 前端基础 文章目录 🏠 初识HTML🏠 HTML结构认识HTML标签HTML文件基本结构标签层次结构快速生成代码框架 🏠 HTML常见标签注释标签标题标签 h1-h6段落标签 p换行标签 br格式化标签图片标签 img超链接标签…...
黑马V11版 最新Java高级软件工程师课程-JavaEE精英进阶课
课程大小:60.2G 课程下载:https://download.csdn.net/download/m0_66047725/90615581 更多资源下载:关注我 阶段一 中台战略与组件化开发专题课程 阶段二 【物流行业】品达物流TMS 阶段三 智牛股 阶段四 千亿级电商秒杀解决方案专题 …...
C#插件与可扩展性
外接程序为主机应用程序提供了扩展功能或服务。.net framework提供了一个编程模型,开发人员可以使用该模型来开发加载项并在其主机应用程序中激活它们。该模型通过在主机和外接程序之间构建通信管道来实现此目的。该模型是使用: System.AddIn, System.AddIn.Hosting, System.…...
CVPR‘25 | 高文字渲染精度的商品图文海报生成
本文分享阿里妈妈智能创作与AI应用团队在图文广告创意方向上提出的商品图文海报生成模型,通过构建字符级视觉表征作为控制信号,可以实现精准的图上中文逐像素生成。基于该项工作总结的论文已被 CVPR 2025录用,并在阿里妈妈业务场景落地&#…...
