缓存与数据库双写一致性方案
2021-08-12 15:47:33 25 举报
缓存与数据库双写一致性方案
作者其他创作
大纲/内容
删除缓存
删除缓存成功
id=1写请求
缓存中存在数据
是
结束
保证同一个商品id的请求进入同一个内存队列
否
发送删除延时消息
消息队列
更新
1.从mysql数据库查询数据2.存入redis缓存
方案二:延时双删+mq
写请求
方案一:基于内存队列保证数据库与缓存数据一致性
web服务器
发送删除失败的消息到mq
更新数据库
从binlog或mq获取数据
从缓存中查询数据
内存队列1
查询缓存中是否有数据
api网关(根据id进行路由)
方案三:基于binlog+mq
id=1读请求
线程1
读请求
最终一致性,保证缓存跟mysql数据库的数据能最终保持一致
缓存删除成功
线程3
是否存在数据
内存队列2
缓存中是否存在数据
mysql
消费消息,对缓存进行删除
一共阻塞时间是否超过200毫秒
binlog日志
保证同一个商品id的请求分发到同一台web服务器上
异步
判断队列中是否有当前id的读请求
删除redis缓存
根据id进行hash路由
是否为读请求
阻塞20毫秒
监听mysql的binlog日志可以试用开源组件实现,比如canal、maxwell
从缓存中读取数据
从mysql数据库读取数据
内存队列3
1.删除缓存2.更新数据库
直接从mysql中查询
mysql数据库中是否存在数据
线程2
将数据存入redis缓存
0 条评论
下一页