导图社区 MySQL和Redis数据一致性
这是一篇关于MySQL和Redis数据一致性的思维导图,MySQL和Redis作为两种不同类型的数据库系统,在数据一致性方面需要特别注意,尤其是在高并发的应用场景中。以下是关于MySQL和Redis数据一致性的详细分析
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
MySQL和Redis数据一致性
最终一致性
更新数据库+删除缓存
新增数据
非并发
没有数据不一致问题
并发
更新数据
先删除缓存再更新数据库
先更新数据库再删除缓存
订阅binlog日志
解析数据库binlog获取数据变更信息,实时更新缓存
解析数据库binlog获取数据变更信息,放入消息队列,异步消费消息更新缓存
数据变更MQ
数据库数据变更放入消息队列,异步消费消息更新缓存
消息队列+异步重试
无论先删缓存还是更新数据库,后执行的步骤放入消息队列,如果失败则重试
设置缓存过期时间
延时双删
A删除缓存->A更新数据库->A Sleep一段时间->期间B读缓存->B读缓存未命中读取数据库->B写入缓存->A唤醒删除缓存
延迟消息
加锁
更新数据库和删除缓存加写锁,查询数据加读锁
更新数据库+更新缓存
先更新缓存后更新数据库
消息队列 + 重试机制
先更新数据库后更新缓存
写读并发
先更新数据库再更新缓存
先更新缓存再更新数据库
保存缓存读取记录,对比记录,做业务补偿
写写并发
分布式锁 + 消息队列
分布式锁
数据库乐观锁:版本号、updatetime等
redis setnx
redus redisson分布式锁
强一致性
暂存并发读请求
更新数据库时通过redis缓存并发读请求,等数据库更新完,缓存删除后再读
串行化
读写请求入队列,工作线程从队列中获取请求执行
删除缓存与更新数据库两个操作加写锁,读写互斥、写写互斥、读读共享