- 采用延时双删处理
具体步骤:先删除缓存,再写数据库,休眠一段时间(读数据业务耗时+redis和数据库主从同步耗时),再次删除缓存。
缺点:
- 休眠时间的估算准确性;
- 增加了写入请求的耗时;
- 异步消息处理
先读redis,然后写MySql,然后更新redis集群服务器数据。将更新数据发送到消息队列,redis服务器订阅更新数据,然后同步更新。
缺点:需要部署消费代码同步数据,有一定的开发量。
另一种情况
-
在代码层次执行完增删改后执行redis更新。基本没啥优点。代码侵入性高。在并发下还有可能数据不一致。
-
基于消息中间件,增删改后将增删改对应表和对应的数据唯一标识放入队列。然后在通过队列消息内容查询数据库更新redis。
-
监听数据库更改来实现redis更新。阿里canal可以做到。可以监听数据库日志来实现。
-
以上三种方案基于是数据极端事件的数据一致性。还有基于定时调度任务定时对在周期内更新或新增及删除的消息至redis个
优点:开发过程中一般会根据实际情况来选择,或组合使用
网友评论