数据一致性解决方案
方案一:延时双删
概述:写操作前后都进行删除缓存操作,并设置合理超时时间
步骤
- 1.删除缓存
- 2.写数据库
- 3.休眠
- 4.再次删除缓存
休眠时间如何确定
- 读数据逻辑耗时
- Redis和数据库主从同步耗时
优化:缓存设置过期时间,到达缓存过期时间,后面请求DB中读取新值回填缓存
弊端:超时时间内数据不一致,又增加写请求的耗时
方案二:异步更新缓存(基于订阅binlog的同步机制)
概述:MySQL binlog增加订阅消费 + 消息队列 + 增量数据更新Redis
步骤
- 1.MySQL产生更新操作,binlog消息推送至Redis,Redis根据binlog记录更新
- 2.可结合阿里开源框架canal