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

起因

先删除redis 后操作数据库

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

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

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

如何解决?

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

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

采用双删策略

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

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

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

本地事务表+消息队列

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容