(1)何为一致性?
-
1、定义:
- 指系统中各节点数据保持一致。
- 分布式系统中,可以理解为多个节点中的数据是一致的。
- 指系统中各节点数据保持一致。
-
2、分类:
- 强一致性:写进去的数据是什么,读出来的数据就是什么。
- 弱一致性:只保证到某个时间级别后,数据能达到一致。
- 最终一致性:在某个时间点后数据会达到一致。
(2)Redis与数据库如何保证一致性?/Redis一致性问题?
- 1、先删除缓存,再更新数据库;
- 2、先更新数据库,再删除缓存;
- 3、先更新缓存,再更新数据库;
- 4、先更新数据库,再更新缓存;
(3)更新缓存和删除缓存如何选择?
- 更新缓存:
- 使用场景:数据使用较为频繁 。
- 删除缓存:
- 使用场景:数据使用频率不高。
(4)先删除缓存,再更新数据库存在问题?及其解决方案?
- 存在问题:
- 删除缓存成功,更新数据库失败:导致缓存中的数据被B更新为旧数据。
- 解决方案:
- 失败重试 + 延时双删:
- 对于数据库更新失败,加入更新失败重试机制,数据库更新成功后,延时一段时间,再次删除缓存。
- 失败重试 + 延时双删:
(5)先更新数据库,再删除缓存存在问题?及其解决方案?
- 存在问题:
- 更新数据库成功,删除缓存失败:此时缓存中为旧数据,导致其他线程读取到旧数据。
- 解决方案:
- 对于删除缓存失败:
- 订阅binlog:数据库的每一步操作均会写入binlog日志,可以通过监听binlog,实时感知数据变化情况,根据数据变化情况删除redis并添加重试机制,直至redis删除成功。
- 引入消息队列
若Redis删除失败,则将Redis key放入消息队列,消费端监听消息队列并删除Redis直至删除成功。
- 对于删除缓存失败:
(5)总结
- 数据库更新失败:失败重试,延时双删。
- 缓存删除失败:订阅binlog/引入消息队列。