Redis作为缓存,双写一致性怎么保证?
就是问:缓存里数据怎么保证跟数据库里面的一致呢
我们探讨一下这几种方案
1 先删除缓存在更新数据库
在【删除缓存之后】【更新数据库之前】来了一个请求,然后缓存获得了老的数据,数据库更新了,不一致发生了
2 先更新数据库,再删除缓存
这样,缓存在数据库更新后再更新,总能一致了吧。
我们假设:在【修改数据库之前】,此时缓存刚好失效,另一个请求进来发现缓存不存在,就会从数据库中读取数据,但是【读取完了还没放到缓存中】,此时发生了【修改数据库+删除缓存】的操作,然后【读取的老数据放到了缓存中】,这样就出现了不一致。
个人感觉:【修改数据库+删除缓存】时间 远大于【数据放到缓存中】,这种情况已经很安全了。
但是还有更安全的
3 延时双删
1、先删除缓存
2、再写数据库
3、休眠500ms(根据统计线程读取数据和写缓存的时间) (休眠的作用是当前线程等其他线程读完了数据后写入缓存后,删除缓存)
4、再删除缓存
重生之八股仙帝 文章被收录于专栏
曾有一千古奇人,精修八股文,成遁世之高人,彻天彻地畅游天地间。 今人皆忙忙,急于求成,岂不知八股乃道门口径,背负天人,若经熟读背诵,更能开拓智慧之门,探寻未来之路。 天下繁华,不尽长夜,唯有读书为伴,熟读八股文更是攀登高峰之路。磨砺文字,升腾智慧,唯有勤玉立志,始可破天荒,登临九重不竭之巅! 吾辈修炼之路,虽曲折荆棘,但信念不曾磨灭,唯有铭记八股精髓,方能指引灵魂归宿,成就一生辉煌!