不同数据库写入导致的缓存不一致

时间:2016-12-09 20:41:55

标签: caching consistency

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

让我们说A,B,C每次都进行一次读取,并将Car信息放入缓存中,所以
A有year => {make, model}
B有make => {model, year}
C有model => {make, year}

然后B将年份更新为"2016-12-25",因此在db写入之后,B&#39}中的此类元素将被删除,但其他两个呢?我们如何确保其他两个缓存也删除相应的元素。

1 个答案:

答案 0 :(得分:1)

基本上你有两个选择:是否同步删除操作。

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

  • 如果您可以容忍删除/刷新一些延迟,可能只需更新数据库并等待缓存条目在其他服务上过期。

如果你的服务能够正确地看到鬼车,那么要求很大。

相关文章是’Cause I’m Strong Enough: Reasoning about Consistency Choices in Distributed Systems,来自Alexey Gotsman,Hongseok Yang,Carla Ferreira,Mahsa Najafzadeh和Marc Shapiro。