|NO.Z.00049|——————————|BigDataEnd|——|Hadoop&Redis.V02|——|Redis.v02|数据不一致|
一、数据不一致
### --- 数据不一致
~~~ 缓存和DB的数据不一致的根源 : 数据源不一样
### --- 如何解决
~~~ 强一致性很难,追求最终一致性(时间)
~~~ 互联网业务数据处理的特点
~~~ 高吞吐量
~~~ 低延迟
~~~ 数据敏感性低于金融业
~~~ 时序控制是否可行?
~~~ 先更新数据库再更新缓存或者先更新缓存再更新数据库
~~~ 本质上不是一个原子操作,所以时序控制不可行
~~~ 高并发情况下会产生不一致
### --- 保证数据的最终一致性(延时双删)
~~~ 先更新数据库同时删除缓存项(key),等读的时候再填充缓存
~~~ 2秒后再删除一次缓存项(key)
~~~ 设置缓存过期时间 Expired Time 比如 10秒 或1小时
~~~ 将缓存删除失败记录到日志中,利用脚本提取失败记录再次删除(缓存失效期过长 7*24)
### --- 升级方案
~~~ 通过数据库的binlog来异步淘汰key,利用工具(canal)将binlog日志采集发送到MQ中,
~~~ 然后通过ACK机制确认处理删除缓存。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
浙公网安备 33010602011771号