本文背景:一个历史模型的演变
这个模型最终实现后,是用了双写的方案。cache层是有供读取的有效数据的。
最近发现个极低概率出现的问题,发生在删除的逻辑上。删除逻辑是删了mongo,会返回给cache逻辑删的指定的key,然后cache做移除。如果mongo不存在对应的key,就会返回0给cache,这样cache就不会执行移除逻辑。
这个双删,有个隐藏的坑点,就是mongo删成功的时候,cache如果没有删成功,那么就会有脏数据出现了。
而且,再删除,mongo也不会返回对应的key给cache,就造成了前端数据删除失败的情况发生。
解决方案也很简单,mongo层的移除,事实上不管key是否存在,都应当返回给cache对应的key。如此就可以确保出现问题的时候,再次删除可以有效运转。
这个坑,本质上是思考逻辑没有考虑周全。以此记录。
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。
留言