数据库
首页 > 数据库> > Redis和Mysql如何保持数据一致性?

Redis和Mysql如何保持数据一致性?

作者:互联网

1、导致数据不一致的原因

        在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新,数据库和缓存更新,就容易出现缓存(Redis)和数据库(MySQL)间的数据一致性问题。

使用redis读取数据的业务流程

2.缓存先后删除问题

不管是先写MySQL数据库,再删除Redis缓存;还是先删除缓存,再写库,都有可能出现数据不一致的情况。

2.1 先删除缓存

2.2 后删除缓存

3.解决方案

3.1 延时双删策略

3.1.1 基本思路

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

3.1.2 具体步骤

问题:这个500毫秒怎么确定的,具体该休眠多久时间呢?

3.1.3 设置缓存过期时间是关键点

3.1.4 方案缺点

结合双删策略+缓存超时设置,这样最差的情况就是:

3.2 异步更新缓存(基于Mysql binlog的同步机制)

3.2.1 整体思路

3.2.2 Redis更新过程

(1) 数据操作主要分为两种:

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

(2)读取binlog后分析 ,利用消息队列,推送更新各台的redis缓存数据。

这里的消息推送工具你也可以采用别的第三方:kafka、rabbitMQ等来实现推送更新Redis!

标签:缓存,删除,数据,数据库,redis,Redis,Mysql,保持数据
来源: https://blog.csdn.net/miaoyitao/article/details/123629340