【Redis】Redis做为缓存,MySQL如何与Redis保持数据一致

Redis的作用

一般情况下Redis是用来实现应用和数据库之间的一个读操作的缓存层,主要目的是减少数据库的io,还可以提升数据库io性能

方法一:

先更新MySQL数据库,再删除缓存,再从数据库查询到的最新的数据同步到redis。采用最终一致性性策略。

缺点:相较于mq的方式,这种方式由于要查数据库并将最新数据写到redis,可能会造成接口响应速度变慢。

方法二:

更新mysql数据库,再采用mq异步的方式,将数据同步到redis中。

缺点:数据同步延时概率比较大,数据库的更改信息投递到mq中,消费者可能没来得及消费消息同步数据到redis。

优点:异步解耦

方法三:

基于订阅mysql binlog,采用mq异步的形式将数据同步到redis(canal框架)。

将mysql以主从的方式部署,主库负责写,从库负责读,当主库的binlog日志文件发生改变时,将信息同步到从库,从库执行对应的sql,保证主从一致性。

canalServer端,伪装成mysql的从节点,订阅mysql主节点的binlog文件,当主节点的binlog发生变化时,会将binlog日志文件发送给canalServer端,自己创建的处理程序连接到canalServer端,将数据同步到redis。

优点:手动直接更改数据库也会自动同步到redis。

方法四:

延时双删策略(不推荐)

  • 先删缓存,在更新mysql并同步到redis,在高并发的情况下,第一个线程还没来得及更新mysql时,其他线程读取到的缓存可能为null值,将mysql旧的数据同步到redis中了。

解决办法:延时删除,在t1线程更新数据库之后,sleep一段时间再去删除缓存。

缺点:t1线程延时多少秒再去删除缓存中的key?难以控制,得根据业务逻辑的执行时间和写缓存的时间来进行估算。

补充:什么是双写一致性协议?

先更新数据库,在更新缓存。

updateDB();
updateredis();

多个线程同步修改mysql和redis时,由于mysql行锁机制,多个线程同时修改同一行数据,只能有一个线程修改成功,两个线程更新完数据库后同时更新redis,由于不能确保两个线程更新缓存的先后顺序,可能会造成数据库和缓存的不一致性。

解决办法:使用事务保证更新数据库和更新缓存整个两个操作的原子性。

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

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

相关文章

Unity实现角色受到攻击后屏幕抖动的效果

文章目录 实现效果摄像机抖动脚本 玩家受伤其他文章 实现效果 首先看一下实现效果。 摄像机 我们要使用屏幕抖动,使用的是CinemachineVirtualCamera这个组件,这个组件需要在包管理器中进行导入。 导入这个组件之后,创建一个Chinemachine-…

CH2--x86系统架构概览

2.1 OVERVIEW OF THE SYSTEM-LEVEL ARCHITECTURE 图中的实线箭头表示线性地址,虚线表示段选择器,虚线箭头表示物理地址 2.1.1 Global and Local Descriptor Tables 全局描述符表 (GDT) GDT是一个全局的段描述符表,它存储在系统内存中的一个固…

MYSQL逻辑架构

文章目录 MYSQL逻辑架构1. 逻辑架构剖析1.1.1 MYSQL的逻辑架构---三层1.1.2 连接层---第一层1.1.3 服务层---第二层1.1.4 引擎层---第三层 2 服务器处理客户端请求---三部分3. SQL执行流程3.0 SQL语法顺序3.1 MYSQL中的SQL执行流程3.1.1 查询缓存3.1.2. 解析器3.1.3. 优化器3.1…

虹科方案 | LIN/CAN总线汽车零部件测试方案

文章目录 摘要一、汽车零部件测试的重要性?二、虹科的测试仿真工具如何在汽车零部件测试展露头角?三、应用场景**应用场景1:方向盘开关的功能测试****应用场景2:各类型电机的控制测试****应用场景3:RGB氛围灯的功能测试…

详解MySQL索引+面试题

前言: 📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。 😇😇😇有兴趣的话关注博主一起学习,一起进步吧! 一、索引概述…

芯片SoC设计你了解吗?

数字IC设计根据岗位性质一般包含SOC设计,前端设计,ASIC设计,逻辑设计,IP设计,CPU设计等。 有人说:做IP设计就是翻译官,做SOC设计就是连连看。 SoC设计是做什么的?与IP设计有什么不同…

docker系列(7) - Dockerfile

文章目录 7. Dockerfile7.1 Dockerfile介绍7.2 指令规则7.3 指令说明7.3.1 RUN命令的两种格式7.3.1 CMD命令覆盖问题7.3.2 ENTRYPOINT命令使用7.3.3 ENV的使用 7.4 构建tomcat Dockerfile案例7.4.1 准备原始文件7.4.2 编写Dockerfile7.4.3 构建镜像7.4.4 验证镜像 7.5 构建jdk基…

【深度学习】ONNX模型多线程快速部署【基础】

【深度学习】ONNX模型CPU多线程快速部署【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】ONNX模型CPU多线程快速部署【基础】前言搭建打包环境python多线程并发简单教程基本教程ONNX模型多线程并发 打包成可执行文件总结 前…

springboot实战(七)之jackson配置前后端交互下划线转驼峰对象序列化与反序列化

目录 环境: 1.驼峰转下划线配置 1.1单个字段命名转化使用JsonProperty注解 1.2单个类进行命名转化 3.全局命名策略配置 2. 序列化以及反序列化 2.1序列化 2.2反序列化 3.自定义序列化与反序列化 在Web开发中,JSON(JavaScript Obje…

【Zblog搭建博客网站】windows环境搭建属于自己的博客并发布上线 - cpolar内网穿透

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕…

数据结构题型10-链栈

//参考博客&#xff1a;https://blog.csdn.net/weixin_37716512/article/details/104068102 #include <iostream> //引入头文件 using namespace std;typedef int Elemtype;#define Maxsize 10 #define ERROR 0 #define OK 1typedef struct Linknode {Elemtype data;…

DS18B20温度传感器

DS18B20简介 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线&#xff08;单总线&#xff09;”接口的温度传感器 这种一线总线就是 三线制 SPI DS18B20的 配置寄存器&#xff1a; TM 是测试位&#xff0c;出厂设置就被设置为0&#xff0c;不需要改动&#xff0c; R1、R…

企业架构LNMP学习笔记61

Nginx作为tomcat的前段反向代理&#xff1a; 在实际业务环境中&#xff0c;用户是直接通过域名访问&#xff0c;基于协议一般是http、https等。默认tomcat运行在8080端口。一般会通过前端服务器反向代理到后端的tomcat的方式&#xff0c;来实现用户可以通过域名访问tomcat的we…

微信收款码费率0.38太坑了

作为一个有多年运营经验的商家&#xff0c;我本人在申请收款功能时曾经走过了不少弯路。我找遍了市面上的知名的支付公司&#xff0c;但了解到的收款手续费率通常都在0.6左右&#xff0c;最低也只能降到0.38。这个过程吃过不少苦头。毕竟&#xff0c;收款功能是我们商家的命脉&…

AI聊天ChatGPT系统源码卡密验证开源版

ChatGPT卡密验证版源码是一个基于PHP7.4和MySQL5.6的聊天AI源码&#xff0c;它不仅支持暗黑模式、反应速度极快&#xff0c;而且充值方面采用后台生成卡密方式&#xff0c;方便快捷&#xff0c;如果您有能力将其接入在线支付&#xff0c;即可进一步拓展充值方式&#xff0c;为更…

KMeans算法全面解析与应用案例

目录 一、聚类与KMeans介绍聚类的基础概念KMeans算法的重要性 二、KMeans算法原理数据集和特征空间距离度量算法步骤 三、KMeans案例实战案例背景&#xff1a;客户细分数据集说明Python实现代码输出与解释 四、KMeans的优缺点优点计算效率高算法简单易于实现 缺点需要预设K值对…

一、机器学习基础知识:基本概念与Python开发环境

文章目录 1、机器学习的不同类型1.1 监督学习1.2 无监督学习1.3 强化学习 2、Python开发环境2.1 Python第三方库2.2 AnacondaPycharm集成开发环境 1、机器学习的不同类型 机器学习属于人工智能的一个分支&#xff0c;专门用于对数据进行自动分析以发现相关规律&#xff0c;从而…

视频监控/视频汇聚/安防视频监控平台EasyCVR配置集群后有一台显示离线是什么原因?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…

芯片验证就是一次旅行

如果你国庆希望去一个你不曾去过的城市旅行&#xff0c;比如“中国苏州”。对游客来说&#xff0c;它是个蛮大的城市&#xff0c;有许多景点可以游玩&#xff0c;还有许多事情可以做。但实际上&#xff0c;即使最豪也最清闲的游客也很难看苏州的所有方方面面。同样的道理也适用…

肖sir__mysql中数据库后端无法展示

mysql中数据库后端无法展示&#xff1a; 错误现象 解决方法&#xff1a; mysql中数据库后端无法展示&#xff1a;my.cnf (5,7数据库) 在 mysql 配置文件中加入&#xff1a; sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 或者重启数据库