当前位置: 首页 > news >正文

普通情况和高并发时,Redis缓存和数据库怎么保持一致?

普通情况和高并发时,Redis缓存和数据库怎么保持一致?

  • 普通情况
    • 思路
  • 高并发时
    • 思路

Q:缓存和数据库怎么保持一致?
A:绝对不可能保持一致的,在实际业务开发中,有一些方案可以做取舍。

实际业务中,疑问点主要有:

  1. 是先更新Redis还是先更新Mysql?
  2. 是Redis和Mysql都更新,还是只更新Mysql?
  3. Mysql或Redis其中一个更新失败,该业务要算作失败吗?需要回滚吗?

这是我根据实际业务开发经验,总结的操作方案图: 在这里插入图片描述

普通情况

思路

仅保证数据库是完整有效的数据,有变动后就删除Redis,不一致的结果都属于延迟的情况。但是当数据变动后,都需要访问数据库至少一次来更新到缓存。

新增

  1. Mysql新增数据,失败即失败
  2. Redis无操作

编辑

  1. Mysql修改数据,失败即失败
  2. Redis删除数据,失败即失败

删除

  1. Mysql删除数据,失败即失败
  2. Redis删除数据,失败即失败

获取

  1. 从Redis获取,就有返回
  2. 从Mysql获取,有就更新到Redis,返回

高并发时

思路

需要保证数据库和Mysql是完整有效的数据,有变动时需要同步修改Redis,不一致的结果都属于延迟的情况。当数据变动后,无需访问数据库。

新增

  1. Mysql新增数据,失败即失败
  2. Redis新增数据,失败即失败

编辑

  1. Mysql修改数据,失败即失败
  2. Redis修改数据,失败即失败

删除

  1. Mysql删除数据,失败即失败
  2. Redis删除数据,失败即失败

获取

  1. 从Redis获取,有就返回,无就返回无

相关文章:

普通情况和高并发时,Redis缓存和数据库怎么保持一致?

普通情况和高并发时,Redis缓存和数据库怎么保持一致? 普通情况思路 高并发时思路 Q:缓存和数据库怎么保持一致? A:绝对不可能保持一致的,在实际业务开发中,有一些方案可以做取舍。 实际业务中&a…...

Django -- 自动化测试

概述 测试是一种例行的、不可缺失的工作,用于检查你的程序是否符合预期。 测试可以划分为不同的级别。一些测试可能专注于小细节(比如某一个模型的方法是否会返回预期的值?), 一些测试则专注于检查软件的整体运行是否…...

NodeJS 在Windows / Mac 上实现多版本控制

NodeJS 的多版本控制 本文介绍一下在 windows/MacOS 上 如何 切换和使用多个版本的 NodeJS。 Windows 本小节介绍一下在windows上管理不同版本的NodeJS。 nvm-windows 工具 nvm-windows 是在 windows 上管理 NodeJS 版本的一个工具。 它可以很方便的 下载、移除、查看、切…...

Web3 游戏周报(3.24-3.30)

【3.24-3.30】Web3 游戏行业动态: Web3 开发平台 Mirror World 在 Solana 上推出首个游戏 rollup 链 NFT 卡牌游戏 Parallel 完成 3,500 万美元融资,Solana Ventures 等参投 加密游戏开发公司 Gunzilla Games 完成 3,000 万美元融资 Telegram 游戏 No…...

算法思想1. 分治法2. 动态规划法3. 贪心算法4. 回溯法

目录 递归和动态的区别:空间和时间复杂度之争 递归空间复杂度低;动态时间复杂度第低...

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的:makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb,数据库中创建表t_location_count表,表中设置两个…...

达梦数据库 优化

谁进行优化?优化什么? 优化不能仅从数据库方面考虑,比如,在存储达到数据库极限、应用涉及人员设计的代码稀巴烂的情况下,进行调优就是杯水车薪的效果。 涉及到优化人员: 数据库管理员应用程序架构师应用…...

数据如何才能供得出、流得动、用得好、还安全

众所周知,数据要素已经列入基本生产要素,同时成立国家数据局进行工作统筹。目前数据要素如何发挥其价值,全国掀起了一浪一浪的热潮。 随着国外大语言模型的袭来,国内在大语言模型领域的应用也大放异彩,与此同时&#x…...

idea开发 java web 酒店推荐系统bootstrap框架开发协同过滤算法web结构java编程计算机网页

一、源码特点 java 酒店推荐推荐系统是一套完善的完整信息系统,结合java web开发和bootstrap UI框架完成本系统 采用协同过滤算法进行推荐 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式…...

Linux——线程控制

目录 前言 一、线程创建 1.创建线程 2.线程传递结构体 3.创建多线程 4.收到信号的线程 二、线程终止 三、线程等待 四、线程分离 五、取消线程 六、线程库管理的原理 七、站在语言角度理解pthread库 八、线程的局部存储 前言 前面我们学习了线程概念和线程创建&…...

【Leetcode 347】,前k个高频元素,小根堆的调整

参考题解 题目:给定一个数组,输出 前k个高频元素。 思路: 遍历数组,建立小根堆(小根堆的元素是元组(num,freq),排序规则是每个元素的频率)。 下面使用数组‘heap’&…...

【图论】【分类讨论】LeetCode3017按距离统计房屋对数目

本文涉及的知识点 图论 分类讨论 本题同解 【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目 LeetCode3017按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中,存在编号从 1 到 n 的房屋,由 n 条街道相连。对所有 …...

浅谈Yum 安装和 源码安装

浅谈Yum 安装和 源码安装 本文所叙述的Linux系统是基于RedHat发行版的CentOS7 yum安装 1. 前言 我们知道在Windows上下载的安装包后缀是 .exe ,与之对应的 在 Linux下的安装包的后缀是 .rpm rpm (Red Hat Package Manager) 是红帽软件包管理器 我们在Windows电脑…...

JavaEE初阶Day 3:多线程(1)

目录 Day 3:多线程(1)1. 线程1.1 引入线程的原因1.2 线程的定义1.3 为何线程更轻量1.4 问题 2. 多线程代码2.1 继承Thread重写run2.2 通过实现Runnable接口创建线程2.3 针对2.1的变形使用匿名内部类2.4 针对Runnable创建匿名内部类2.5 使用la…...

gutil140.dll是什么?gutil140.dll无法继续执行的解决方法

gutil140.dll文件是一个动态链接库(DLL)文件,通常与Microsoft Visual Studio 2015相关联。 gutil140.dll是开发过程中使用的工具函数集合,它辅助开发人员执行常见的编程任务,如文件操作、内存分配和字符串处理等。这个…...

在CentOS 7上安装Python 3.7.7

文章目录 一、实战步骤1. 安装编译工具2. 下载Python 3.7.7安装包3. 上传Python 3.7.7安装包4. 解压缩安装包5. 切换目录并编译安装6. 配置Python环境变量7. 使配置生效8. 验证安装是否成功 二、实战总结 一、实战步骤 1. 安装编译工具 在终端中执行以下命令 yum -y groupin…...

基于SpringBoot Vue宠物领养系统

一、📝功能介绍 基于SpringBoot Vue宠物领养系统 角色:管理员、用户 当游客打开系统的网址后,首先看到的就是首页界面。在这里,游客能够看到宠物领养救助平台的导航条显示首页、宠物招领、宠物认领、 宠物论坛、宠物资讯、后台管…...

ip命令

ip a 也是ip addr简写 [rootlocalhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft…...

【Kaggle】练习赛《鲍鱼年龄预测》(上)

前言 上一篇文章&#xff0c;讲解了《肥胖风险的多类别预测》机器学习方面的文章&#xff0c;主要是多分类算法的运用&#xff0c;本文是一个回归的算法&#xff0c;本期是2024年4月份的题目《Regression with an Abalone Dataset》即《鲍鱼年龄预测》&#xff0c;在此分享高手…...

Ruby 之交租阶段信息生成

题目 我看了一下&#xff0c;这个题目应该不是什么机密&#xff0c;所以先放上来了。大概意思是根据合同信息生成交租阶段信息。 解答 要求是要使用 Ruby 生成交租阶段信息&#xff0c;由于时间比较仓促&#xff0c;变量名那些就用得随意了些。要点主要有下面这些&#xff1a…...

Qwen3.5-4B-Claude-Opus保姆级教程:Web端UI功能分区与高级参数联动说明

Qwen3.5-4B-Claude-Opus保姆级教程&#xff1a;Web端UI功能分区与高级参数联动说明 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能…...

别再只用官方节点了!手把手教你安装n8n社区节点,解锁隐藏工作流能力

解锁n8n隐藏潜能&#xff1a;社区节点深度应用指南 你是否曾在n8n中构建工作流时&#xff0c;发现官方节点无法满足某些特定需求&#xff1f;比如需要更复杂的文本处理、社交媒体深度集成&#xff0c;或是与某些小众API对接&#xff1f;这正是社区节点大显身手的时刻。作为n8n生…...

Python 3.14 JIT架构深度拆解(含官方未发布IR层流程图+Hot Code Path决策树)

第一章&#xff1a;Python 3.14 JIT编译器演进背景与设计哲学Python 长期以来以解释执行和动态灵活性著称&#xff0c;但性能瓶颈在数值计算、实时服务与高吞吐系统中日益凸显。CPython 解释器的字节码执行模型虽稳定可靠&#xff0c;却难以突破单线程 GIL 与逐指令解释带来的固…...

多模态Agent架构实战落地:从需求分析到生产部署

多模态Agent架构实战落地&#xff1a;从需求分析到生产部署 随着大语言模型技术的普及&#xff0c;单一文本交互的智能系统已无法满足复杂业务场景需求——电商平台需要同时理解用户的商品描述文本、实拍图片和售后语音诉求&#xff0c;教育场景需要处理手写作业、视频讲解和文…...

R包版本冲突别头疼:手把手教你降级igraph 2.1.1,解决monocle3的orderCells报错

R包版本冲突实战指南&#xff1a;精准降级igraph解决monocle3依赖问题 当你满怀期待地安装好monocle3准备进行单细胞拟时序分析时&#xff0c;突然弹出的nei() was deprecated in igraph 2.1.0报错就像一盆冷水浇灭了热情。这种R包版本冲突在生物信息学分析中屡见不鲜&#xff…...

告别‘塑料感’渲染:IBGS如何用‘颜色残差’让3D高斯重建的物体更真实?

告别‘塑料感’渲染&#xff1a;IBGS如何用‘颜色残差’让3D高斯重建的物体更真实&#xff1f; 当你在虚拟场景中看到一个金属茶壶时&#xff0c;是否总觉得它像玩具一样缺乏真实感&#xff1f;这就是当前3D高斯溅射&#xff08;3DGS&#xff09;技术面临的"塑料感"困…...

IDEA 好用的ai插件 Windsurf

文章目录 前言一、Windsurf 插件功能二、IDEA安装三、登录Windsurf四、Windsurf简单使用介绍 前言 在 IntelliJ IDEA 中&#xff0c;Windsurf 是一款专注于 AI 代码辅助的插件&#xff0c;能够提升开发效率。以下是关于该插件的关键信息和使用方法&#xff1a; 提示&#xff1…...

0基础SEO优化的关键点有哪些

0基础SEO优化的关键点有哪些 在互联网时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为了每一个网站运营者必须掌握的一项技能。特别是对于0基础的SEO优化者来说&#xff0c;这是一条充满挑战但也充满机遇的道路。0基础SEO优化的关键点有哪些呢&#xff1f;本…...

Gemma-3-270m多场景落地:政务热线知识库问答、医疗术语解释系统

Gemma-3-270m多场景落地&#xff1a;政务热线知识库问答、医疗术语解释系统 1. 快速上手&#xff1a;部署你的第一个Gemma-3-270m服务 想要快速体验Gemma-3-270m的强大能力&#xff1f;通过Ollama部署只需几个简单步骤。 1.1 环境准备与模型选择 首先确保你已经安装了Ollam…...

VBA循环到底用For、Do While还是Do Until?看完这篇别再傻傻分不清

VBA循环结构深度解析&#xff1a;如何精准选择For、Do While与Do Until&#xff1f; 刚接触VBA时&#xff0c;看到各种循环结构总让人眼花缭乱——For循环、For Each、Do While、Do Until...它们看起来都能完成相似的任务&#xff0c;但实际编码中选错循环类型&#xff0c;轻则…...