假设第一步(更新数据库)成功,第二步(更新缓存)失败。因为缓存不是主流程,数据库才是,所以不会因为更新缓存失败而回滚第一步对数据库的更新。此时一般采取的做法是重试机制,但重试机制如果存在延时还是会出现数据库与缓存不一致的情况,不好处理。
另一种不一致的场景如下:
假设两个线程同时更新同一个数据,线程A把值更新成a,线程B把值更新成b
首先线程A将数据库中的值更新为a
然后线程B将数据库中的值更新为b,再把缓存中的值更新为b
线程B更新完成后,线程A才将缓存中的值更新为a。此时,缓存中的值为a,而数据库中的值却为b,两者并不一致