不同db写造成的缓存不一致

Cache inconsistency caused by different db writes

如果我有一个对象 "Car" 具有三个属性, { year: "2016-12-01", make: "toyota", model: "camry" },并且数据库中有三个 table,每个字段作为其主键,
table1:year(key), make, model
table 2: make(key), model, year
table 3: model(key), make, year,
其中,读写每个table由不同的服务A、B、C处理。

假设A、B、C各读了一次,并将汽车信息放入缓存中,所以
A 有 year => {make, model}
B 有 make => {model, year}
C 有 model => {make, year},

然后B将年份更新为"2016-12-25",所以B的缓存中的这个元素在数据库写入后会被删除,但是另外两个呢?我们如何确保其他两个缓存也删除相应的元素。

基本上您有两个选择:同步或不同步删除操作。

  • 如果您需要在其他缓存中立即处理删除,您需要通过向缓存发送删除请求来同步操作。

  • 如果您可以忍受一些延迟 deleted/refreshed,也许只更新数据库并等待缓存条目在其他服务上过期就足够了。

如果您的服务正常运行是否能看到幽灵车,这些要求在很大程度上取决于。

一篇相关文章是 '因为我足够坚强: 分布式系统中一致性选择的推理,来自 Alexey Gotsman、Hongseok Yang、Carla Ferreira、Mahsa Najafzadeh 和 Marc Shapiro。