<返回更多

Redis和Mysql数据怎么保持一致

2022-03-10    AT小白在线中
加入收藏

 

# 导致数据不一致的原因

# 缓存先后删除问题

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

1.先删除缓存

2. 后删除缓存

# 解决方案

1. 延时双删策略

1.1 基本思路

public void write( String key, Object data )

{

redis.delKey( key );

db.updateData( data );

Thread.sleep( 500 );

redis.delKey( key );

}

1.2 具体步骤

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

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

1.4 方案缺点

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

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

2.1 整体思路

1.涉及到更新的数据操作,利用Mysql binlog 进行增量订阅消费

2.将消息发送到消息队列

3.通过消息队列消费将增量数据更新到Redis上

4.操作情况

2.2 Redis更新过程

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

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

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

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

# 总结

文章来源于JAVA面试那些事儿

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>