如果我有一个物品" 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}中的此类元素将被删除,但其他两个呢?我们如何确保其他两个缓存也删除相应的元素。
答案 0 :(得分:1)
基本上你有两个选择:是否同步删除操作。
如果要求在其他缓存中立即处理删除操作,则需要通过向缓存发送删除请求来同步操作。
如果您可以容忍删除/刷新一些延迟,可能只需更新数据库并等待缓存条目在其他服务上过期。
如果你的服务能够正确地看到鬼车,那么要求很大。
相关文章是’Cause I’m Strong Enough: Reasoning about Consistency Choices in Distributed Systems,来自Alexey Gotsman,Hongseok Yang,Carla Ferreira,Mahsa Najafzadeh和Marc Shapiro。