本文背景:一个历史模型的演变

一个历史模型的演变

这个模型最终实现后,是用了双写的方案。cache层是有供读取的有效数据的。

最近发现个极低概率出现的问题,发生在删除的逻辑上。删除逻辑是删了mongo,会返回给cache逻辑删的指定的key,然后cache做移除。如果mongo不存在对应的key,就会返回0给cache,这样cache就不会执行移除逻辑。

这个双删,有个隐藏的坑点,就是mongo删成功的时候,cache如果没有删成功,那么就会有脏数据出现了。

而且,再删除,mongo也不会返回对应的key给cache,就造成了前端数据删除失败的情况发生。

解决方案也很简单,mongo层的移除,事实上不管key是否存在,都应当返回给cache对应的key。如此就可以确保出现问题的时候,再次删除可以有效运转。

这个坑,本质上是思考逻辑没有考虑周全。以此记录。

Related Posts: 数据双写的小坑 :

avatar