MySQL和mq一致性,Mysql与Redis一致性问题

缓存一致性产生背景

如果每次频繁的访问数据库的时候,虽然查询底层使用B+树索引 但还会做磁盘的IO操作,可能会对数据库的压力非常大。

d3f18cd09c1eaa51a32e918de77e2037.png

所以为了能够减轻数据库的访问压力,会使用一些缓存实现减轻数据库的压力。

比如 Redis、es、ehcache、oscache等。

8648cc03b821f03b14ec90f8cdef4e1b.png

多级缓存架构设计

首先在jvm内置缓存ehcache、oscache底层基于HashMap实现 ,如果服务集群的情况下数据同步采用rmi实现性能可能不是很好。

补充:rmi就是 jvm与jvm之间通讯

设计模式采用装饰模式。

Mysql与Redis缓存一致性原理

Mysql与nosql之间数据一致性问题:

Mysql与redis/es/mongdb 都是相同的。

(相同key)

第一次查询:

1. 查询二级缓存Redis,redis如果没有该缓存数据,则开始查询mysql;

2. 在查询mysql,如果mysql中存在数据的情况下,就将该数据缓存到Redis中

第二次查询:

1. 查询到redis中如果存在该数据的情况下,则不会查询mysql。

能够减轻数据库访问压力。

重点解决方案:

1. 对mysql增量做写的操作的时候,都会同步到Redis。

如果insetdb ,insetredis

如果update ,将redis中该key删除。---懒加载。

如果update ,直接修改redis。---增量同步。

如果delete ,将redis中该key删除。---增量同步。

如果数据库数据发生变化,如何同步给Redis

1. 直接清除Redis缓存;(适合于小项目)基于接口形式实现同步

2. 基于MQ形式异步同步 (适合于中小项目)基于接口形式实现同步

3. 基于canal+mq异步同步 (推荐)基于源头binlog二进制文件实现同步。

基于canal同步的原理:

1. Canal服务器端伪装成一个mysql从节点,订阅mysql主节点的binlog二进制文件

2. Canal服务器端收到binlog文件,就会转换成json的格式发送给Canal客户端。

3. Canal客户端会将该数据同步给nosql缓存 redis

流程:

第一次请求流程:

1. 先请求查询redis缓存,如果redis缓存没有数据则查询mysql数据库,如果mysql数据库存在数据,则将该数据缓存到Redis中。

第一次请求流程:

2. 先请求查询Redis缓存,如果redis缓存存在数据的话,则不会查询mysql数据

从而实现减轻数据库访问压力。

优化:Canal接收到mysqlbinlog文件,将该消息缓存到kafka中,再开启多个消费者

异步地获取消息同步到Redis中,能够提高同步的效率。

如果数据库数据发生变化,如何同步给Redis

方案1:直接删除Redis缓存;

方案2: 基于MQ异步同步更新

方案3: 基于canal订阅binlog同步

http://127.0.0.1:8081/insert?name=mayikt&age=22

http://127.0.0.1:8081/getUser?id=6

http://127.0.0.1:8081/updateUser?userId=9&name=meite6666

基于canal订阅binlog同步 实现原理

1. canal服务器模拟伪装成mysql从节点,订阅mysql 主节点的binlog文件;

2. 当mysql主节点binlog文件发生变化的时候,会通知给canal服务器端;

3. Canal服务器端在将该binlog文件转换为json格式数据发送给canal客户端监听者。

4. canal客户端,在将该数据异步写入到redis中;

a70fd81f995759ccf60006795b5c06a6.png

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

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

相关文章

clustalw序列比对_序列比对(二)

Homology is the central concept for all of biology.——David Wake. Science, 1994前言正如前面引用的这句话,同源性是生物学中的核心问题。研究序列的同源性问题,就要用到序列比对的工具,上一篇笔记简单介绍了序列比对的原理,…

pr渲染程序选哪个_PR的bug你遇到过几个?

哈喽 大家好呀 我是K同学!对于Pr的用户来讲,Pr有很多BUG让人很奔溃,不仅Pr奔溃了,人都奔溃了作为Pr的老用户,今天我就来盘点下,我遇到过Pr的变态BUG第一个Pr不支持微软输出法这是我使用Pr遇到的第一个BUG&a…

java model 中文乱码,java传值乱码解决方法

在做JavaWeb时,总是时不时的会遇到中文传值乱码问题,在你把所有”ISO-8859-1”改成“UTF-8”发现还是没什么用。于是我就找到了一个百试百灵的方法(至少目前我是),就是强行转换成“UTF-8”编码。看代码:RequestMapping("/suc…

检查一列数据的重复项 vba_提取重复值,但字典不是重点。

本例的问题描述:1:源数据与提取的结果在同一个工作表里面;2:提取K、M、O、Q列里面不重复的数据(注意,数据列里面有空白的行);3:把提取出来的结果放在A2单元格的下方,不能有空白行&am…

swiper怎么让不会回弹,为什么我的滚动条拉上拉下都会回弹呢?

其它都是正常的,就是拉上去拉下来自己又回弹回去了,拉不到最底部也拉不到最顶部,拉来拉去都会是这样的category/index.vueimport CategoryHeader from "./header";import CategoryTab from "./tab";import CategoryConte…

异构服务器 微服务_Spring Cloud Alibaba Sidecar 多语言微服务异构

Spring Cloud Alibaba Sidecar 介绍自 Spring Cloud Alibaba 2.1.1 版本后增加了 spring-cloud-alibaba-sidecar 模块作为作为一个代理的服务来间接性的让其他语言可以使用spring cloud alibaba等相关组件。通过与网关的来进行路由的映射,从而可以做到服务的获取&am…

matlab教程点语言,编程语言 / Matlab教程_电脑教程学习网( 5 )

逐次超松弛方法(SOR方法)求解方程组日期:2014-09-26 21:03:34点击:370好评:0#includeiostream.h//逐次超松弛方法(SOR方法)求解方程组 #includemath.h #includeiomanip.h #define n 3 void main() { double A[n][n]{{5,2,1},{-1,4,2},{2,-3,1…

sql 以a开头的所有记录_SQL开发与数据库管理笔记

简介: SQL开发与数据库管理笔记,看过的都说好!原创: 丶平凡世界文章链接:https://mp.weixin.qq.com/s/Y9TmoHOyh7To7jUrMulvEw一、开发管理篇1.按姓氏笔画排序Select * From TableNameOrder By CustomerNameCollate Ch…

zynq中mgtx应用_基于ZYNQ的UCOS移植(TCP通讯)

周五在某小徐处借到了一块Zedboard开发板,平时在公司没有机会做SDK开发的笔记,今天就趁着这块开发板简要记录一些SDK的基本操作。一、功能简介通过第三方库创建SDK工程在ZYNQ-UCOS中实现TCP echo通讯二、配置需求操作系统Windows 10(64位)开发环境SDK 20…

算法描述怎么写_管件材料描述怎么写

通过以上及其我们了解到了管道上不同的管道元件,包括:弯头、三通、异径管、管帽等。但在材料等级表中如何清楚的描述它们的特性,至关重要,因为这涉及材料采购是否正确。以下主要介绍管件材料描述的写法:①弯头 ②DN15~…

linux复制文件通信方式,Linux分布式文件拷贝

在开发过程中总会遇到这种情况,就是需要将一个文件从一个机器拷贝到其他的很多台机器中,最简单的方法是用U盘拷出来再一个一个机器的插进去拷贝,另一张方法则是利用飞鸽传书或者QQ等工具传输,但是都不是很方便,因为每次…

安装linux修复系统文件夹,误删除 Linux 系统文件了?这个方法教你解决

误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收站,删除后的…

linux tmux 详细教程,Linux下的神器介绍之Tmux分屏器

前言我们为什么需要分屏器呢?对于这个问题,我想大家肯定都有自己的看法。主流的观点是这样的,对于生活在Linux下的人(开发人员、运维人员、普通爱好者)都不可避免的使用终端模拟器(比如,gnome-terminal)去执行一些命令或者脚本。但…

laravel created_at 时间戳_使用 HTTP 测试测试 Laravel 中间件

文章转发自专业的Laravel开发者社区,原始链接:https://learnku.com/laravel/t/34002在本文中,我将展示一个使用 HTTP 测试中间件的实例。HTTP 级测试更能适应变化,可读性更强。在最近与 Adam Wathan 和 Taylor Otwell 合拍的《全栈…

动物识别专家系统python_Python有哪些作用?

Python是什么呢?Python是一种全栈的开发语言,如果能学好Python,前端、后端、测试、大数据分析、爬虫等这些工作你都能胜任。那Python有哪些作用呢?Python主要有以下四大主要应用:网络爬虫网站开发人工智能自动化运维接…

linux mint图标大小,Cinnamon:LinuxMint 15桌面设置小技巧

touchwiz自身也在做不断的革新,例如7屏分页,桌面切换3d效果,增强型的下拉菜单设置等。win10多桌面最多可以支持7个桌面开启,而且win10切换多桌面是有快捷键的,可以帮助用户迅速切换或创建以及关闭多桌面。切换方法一&a…

操作系统源代码_国产操作系统“之光”?Windows XP绝密源代码泄露,BT种子已在网上疯传...

微软的Windows操作系统是目前使用人数最多、覆盖最广的桌面操作系统,从安全角度来看,其系统源代码对于公众而言可以说是绝密。不过......现在......,黑客在4Chan平台上以BT种子文件的形式在线泄漏了多个旧Windows版本的源代码,包括…

linux设置多语言环境,怎么为Linux系统配置多语言环境?

这篇文章主要讲述了怎么为Linux系统配置多语言环境的基本方法,其中还包括编码的修改方法,我们就拿用户使用最多的Ubuntu和CentOS这两个为例子吧。需要的朋友可以参考下。修改 /etc/sysconfig/i18n 文件,如LANG“en_US.UTF-8”,xwi…

轴承新旧型号对照表_精密机床主轴轴承,高端轴承进口清关报关流程

精密机床的主轴对轴承精度的要求非常高,我国目前在这一技术上仍然处于一片空白,那么高精度的轴承要怎么进口呢?高精度轴承进口这块其他国家管控得比较严格,高精度轴承的进口又会遇到哪些问题呢?在我们的生活中轴承几乎…

开机自启动程序关闭方法_电脑非常卡,总有软件偷偷自启动?学会这1招,永久关闭它们!...

小编有一个朋友,前段子发微信问我,说他的电脑非常卡,重装电脑后,会好转许多,非常流畅,但是过了几天又卡了。我问了他的电脑配置,首先电脑的配置是绝对ok。当前一流水平,后来我远程操…