加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

高并发情形下怎样让Redis和MySQL保持数据同一

发布时间:2019-09-27 16:01:48 所属栏目:编程 来源:IT知识课堂
导读:营业场景 在高并发的营业场景下,数据库大大都环境都是用户并发会见最单薄的环节。以是,就必要行使redis做一个缓冲操纵,让哀求先会见到redis,而不是直接会见MySQL等数据库。 这个营业场景,首要是办理读数据从Redis缓存,一样平常都是凭证下图的流程来举办

营业场景

在高并发的营业场景下,数据库大大都环境都是用户并发会见最单薄的环节。以是,就必要行使redis做一个缓冲操纵,让哀求先会见到redis,而不是直接会见MySQL等数据库。

高并发情形下怎样让Redis和Mysql保持数据同一

这个营业场景,首要是办理读数据从Redis缓存,一样平常都是凭证下图的流程来举办营业操纵。

高并发情形下怎样让Redis和Mysql保持数据同一

读取缓存步调一样平常没有什么题目,可是一旦涉及到数据更新:数据库缓和存更新,就轻易呈现缓存(Redis)和数据库(MySQL)间的数据同等性题目。

不管是先写MySQL数据库,再删除Redis缓存;照旧先删除缓存,再写库,都有也许呈现数据纷歧致的环境。

举一个例子

1.假如删除了缓存Redis,还没有来得及写库MySQL,另一个线程就来读取,发明缓存为空,则去数据库中读取数据写入缓存,此时缓存中为脏数据。

2.假如先写了库,在删除缓存前,写库的线程宕机了,没有删除去缓存,则也会呈现数据纷歧致环境。

由于写和读是并发的,没法担保次序,就会呈现缓存和数据库的数据纷歧致的题目。

如来办理?这里给出两个办理方案,先易后难,团结营业和技能价钱选择行使。

缓存和数据库同等性办理方案

1.第一种方案:回收延时双删计策

在写库前后都举办redis.del(key)操纵,而且设定公道的超时时刻。

伪代码如下

public void write(String key,Object data){ redis.delKey(key); db.updateData(data); Thread.sleep(500); redis.delKey(key); }

2.详细的步调就是:

1)先删除缓存

2)再写数据库

3)休眠500毫秒

4)再次删除缓存

那么,这个500毫秒怎么确定的,详细该休眠多久呢?

必要评估本身的项目标读数据营业逻辑的耗时。这么做的目标,就是确保读哀求竣事,写哀求可以删除读哀求造成的缓存脏数据。

虽然这种计策还要思量redis和数据库主从同步的耗时。最后的的写数据的休眠时刻:则在读数据营业逻辑的耗时基本上,加几百ms即可。好比:休眠1秒。

3.配置缓存逾期时刻

从理论上来说,给缓存配置逾期时刻,是担保最终同等性的办理方案。全部的写操纵以数据库为准,只要达到缓存逾期时刻,则后头的读哀求天然会从数据库中读取新值然后回填缓存。

4.该方案的破绽

团结双删计策+缓存超时配置,这样最差的环境就是在超时时刻内数据存在纷歧致,并且又增进了写哀求的耗时。

2、第二种方案:异步更新缓存(基于订阅binlog的同步机制)

1.技能整体思绪:

MySQL binlog增量订阅斲丧+动静行列+增量数据更新到redis

1)读Redis:热数据根基都在Redis

2)写MySQL:增编削都是操纵MySQL

3)更新Redis数据:MySQ的数据操纵binlog,来更新到Redis

2.Redis更新

1)数据操纵首要分为两大块:

  • 一个是全量(将所稀有据一次写入到redis)
  • 一个是增量(及时更新)

这里说的是增量,指的是mysql的update、insert、delate改观数据。

2)读取binlog后说明 ,操作动静行列,推送更新各台的redis缓存数据。

这样一旦MySQL中发生了新的写入、更新、删除等操纵,就可以把binlog相干的动静推送至Redis,Redis再按照binlog中的记录,对Redis举办更新。

其拭魅这种机制,很相同MySQL的主从备份机制,由于MySQL的主备也是通过binlog来实现的数据同等性。

这里可以团结行使canal(阿里的一款开源框架),通过该框架可以对MySQL的binlog举办订阅,而canal正是仿照了mysql的slave数据库的备份哀求,使得Redis的数据更新到达了沟通的结果。

虽然,这里的动静推送器材你也可以回收此外第三方:kafka、rabbitMQ等来实现推送更新Redis

【编辑保举】

  1. 微处事架构下,MySQL读写疏散后,Druid毗连池参数优化拭魅战
  2. MySQL索引和SQL调优手册
  3. 深入分解 MySQL 索引和 SQL 调优拭魅战
  4. MySQL数据库监控指标之执行机能总结
  5. 详解MySQL数据库监控指标之毗连状态
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读