当前位置:首页>技术>

redis和MySQL一致性(mysql怎样与redis保持一致性的)

来源:原点资讯(m.360kss.com)时间:2023-06-10 00:46:12作者:YD166手机阅读>>

在实际开发过程中,我们经常会遇见在高并发的的情况下,大量的请求访问Mysql数据库,会造成性能安全问题。所以,我们很多时候会把数据写入到Redis里面,用作缓存来减少数据库的压力,但是Redis 和 MySQL是两种不同类型的数据库,我们要怎样去保证它们之间的数据是一致性的呢?

数据不一致的原因

当数据并发量非常大的情况下,用户的并发访问会对数据库的安全造成极大的安全隐患。

因此,我们就需要使用到Redis来做一个缓存的操作,可以让用户请求先访问Redis,而不直接访问到数据库。

然后只是读取缓存操作的话,一般不会对数据库产生很大的问题,主要是涉及到数据的更新问题,数据库和缓存更新,就很容易出Redis 和 MySQL的数据一致性问题。

产生的问题

其实不管我们是先删除缓存,再写库还是先写库,再删除缓存,都有可能会出现数据不一致的情况:

先删除缓存

如果是删除Redis的缓存数据,在数据还没有写入MySQL数据库的时候,另一个线程就来读取缓存,就会发现这个缓存为空,然后会直接去MySQL数据库读取旧的数据并把数据写入缓存里面。这样,就会造成数据库更新后发现Redis和MySQL里面的数据不一致。

后删除缓存

如果是先把数据写入了MySQL里面,正准备删除缓存的时候,突然写入数据库的线程发生异常,导致了缓存并没有被删除。这个时候,另一个线程就会直接读取到旧的缓存数据,这也会导致Redis和MySQL里面的数据不一致。

解决方案 延时双删策略

这个方案主要是在写入数据的时候都进行缓存的删除操作,并且给它设置合理的超时时间。

具体操作:

1.先删除缓存 再写数据库

2.休眠几百毫秒 再次删除缓存

这么做的目的主要是为了确保这个请求结束后,有可能造成的缓存脏数据。这个方案最关键的其实还是给缓存设置过期时间,只要达到过期时间,缓存删除,如果后面还有读的请求,就会从数据库中读取新的值并且回填到缓存里面,这个是保证最终一致性的解决方案。

异步更新缓存

这个方案是基于Mysql binlog的同步机制,在设计的更新的数据操作的时候,利用Mysql binlog进行增量的订阅消费,然后将消息发送给消息队列,再通过消息队列消费将增量数据更新到Redis上面。

具体操作:

1.读取Redis缓存 写Mysql

2.更新Redis缓存数据,Mysql 的数据操作都记录到binlog,再通过下次队列及时更新到Redis缓存上

这样的好处是一旦Mysql 中发生了新的写入、更新、删除等操作,丢会通过binlog把相关消息推送到Redis里面,Redis会根据binlog中的操作记录对Redis进行更新,而且这种方案和Mysql 的主从备份很相像,毕竟Mysql 的主从备份也是通过binlog来实现的数据的一致性的。

总结

最后,在当前分布式高并发众多的场景下,解决高并发场景下数据一致性的方案有两种,分别是延时双删策略和异步更新缓存两种方案。

栏目热文

mysql和redis怎么保证数据一致(mysql怎样与redis保持一致性的)

mysql和redis怎么保证数据一致(mysql怎样与redis保持一致性的)

导语 | 本文的主要思路是首先带大家认识了解MySQL和Redis的数据一致性情况,然后进行反推不一致的情况,从而进行探...

2023-06-10 00:07:37查看全文 >>

如何保证redis与数据库的一致性(如何保证redis和数据库一致性)

如何保证redis与数据库的一致性(如何保证redis和数据库一致性)

redis在国内各大公司都很热门,比如新浪、阿里、腾讯、百度、美团、小米等。Redis也是大厂面试最爱问的,尤其是Red...

2023-06-10 00:49:05查看全文 >>

怎么保证mysql和redis的双写一致(怎么保证redis和数据库数据一致)

怎么保证mysql和redis的双写一致(怎么保证redis和数据库数据一致)

1.mysql持久化数据,Redis只读数据redis在启动之后,从数据库加载数据。读请求:不要求强一致性的读请求,走r...

2023-06-10 00:39:34查看全文 >>

保证redis和数据库数据保持一致(redis和数据库怎么保证数据一致性)

保证redis和数据库数据保持一致(redis和数据库怎么保证数据一致性)

Redis和MySQL是两种不同类型的数据库,它们在数据存储和访问方式上存在一些差异。由于这种差异,保持Redis和my...

2023-06-10 00:23:20查看全文 >>

如何保证redis和数据库一致(redis和数据库的一致性怎么处理)

如何保证redis和数据库一致(redis和数据库的一致性怎么处理)

1、强一致性如果要保证redis和数据库强一致性,那就要加锁。主要就是读写锁,读的时候不加锁,写的时候加锁。可以用red...

2023-06-10 00:50:43查看全文 >>

汽车怠速时间长开暖风会中毒吗(小车长时间怠速开暖风会怎样)

汽车怠速时间长开暖风会中毒吗(小车长时间怠速开暖风会怎样)

要说冬天最美滋滋的事情,无非就是待在室内有暖气,待在屋外车内有空调~此时南方人可能会想:我们虽然室内没暖气,但谁的车里还...

2023-06-10 00:18:47查看全文 >>

原地怠速开暖风对车有影响吗(开暖风影响汽车怠速是怎么回事)

原地怠速开暖风对车有影响吗(开暖风影响汽车怠速是怎么回事)

大家好,我是喵哥。现在是春天了,外面气温还是有点冷,而且春雨绵绵一直在下着雨。这种天气开车出去我们都必然得开空调是不是?...

2023-06-10 00:29:27查看全文 >>

怠速下开暖气对车有影响吗(长时间怠速开暖风对车有什么坏处)

怠速下开暖气对车有影响吗(长时间怠速开暖风对车有什么坏处)

今天是12月2日第八个“全国交通安全日”今年的主题是全国交通安全日1道路千万条,安全第一条,行车不规范,亲人两行泪。你我...

2023-06-10 00:44:47查看全文 >>

怠速着车暖风开最大可以吗(车在怠速情况下开暖风)

怠速着车暖风开最大可以吗(车在怠速情况下开暖风)

如何判断发动机工况是否良好?如何判断一台二手车的?今天我就作为一个二手车贩子,多年的经验来告诉你们。很多人去买二手车的时...

2023-06-10 00:39:56查看全文 >>

汽车开暖风怠速会增加吗(汽车怠速下开暖风对车有何影响)

汽车开暖风怠速会增加吗(汽车怠速下开暖风对车有何影响)

暖风是来自发动机工作产生的热量转换,属于废物利用,原则上是不会增加油耗。当然,如果刚着车就打开暖风,这时候就会因为温度原...

2023-06-10 00:50:42查看全文 >>

文档排行