缓存一致性问题
缓存的实时同步,这种数据同步是增量、主动、强一致性
1、对数据库数据进行更新的时候淘汰缓存
2、读取数据的时候更新缓存,为了避免缓存击穿带来的雪崩问题我们需要做同步处理,控制只有一个线程去读取数据然后更新到缓存,其他线程被阻塞等待
3、设置缓存失效时间,假设更新缓存失败,这个缓存失效时间一到就会把缓存失效
数据准时同步
这种同步是增量、被动、准一致性
对数据进行更新操作时在更新数据库后发送一个MQ消息(如果要保证数据不丢失,可以建立本地一个消息表在发送MQ失败后可以重试)
缓存更新服务消费MQ更新数据消息后读取数据库数据进行相关业务处理
缓存更新服务更新业务处理结果数据到缓存中
任务调度更新
通过分布式调度任务进行定时更新缓存,使用场景:报表统计数据、对账数据定时更新到缓存等实时性要求不高的场景
binlog 日志订阅
通过订阅binlog来更新缓存,把我们搭建的消费服务,作为mysql的一个slave,订阅binlog,解析出更新内容,再更新到缓存这种日志订阅方式在mysql压力比较小的情况下,延时比较低和业务完全解耦,缺点要单独搭建同步服务成本比较大