db 和 mysql 何时数据会不一致?如何解决

2019-08-26  本文已影响0人  swoft_

起因

先删除redis 后操作数据库

先删除redis之后,还没有修改数据库。另外一个进程过来之后,查看redis中没有值,于是读取数据库中老的值,写到缓存中去。这个时候数据库就和缓存不一致了。

同样道理,先写数据库,删除缓存。写入之后,宕机了,导致删除失败。重启之后导致数据库和缓存数据不一致。

因为写和读是并发的,没法保证顺序,就会出现缓存和数据库的数据不一致的问题。

如何解决?

合理设置过期时间,保证最终一致性

根据业务,合理设置时间。业务能够承受多长时间不一致的场景。保证最终一致性即可。

采用双删策略

删除redis 写入数据库 删除redis (多进行一步操作,即可解决)

异步更新缓存(基于订阅binlog的同步机制)

增量+全量
一个是全量(将全部数据一次写入到redis)
一个是增量(实时更新)

本地事务表+消息队列

上一篇 下一篇

猜你喜欢

热点阅读