【数据库】redis怎样保证数据一致性
2019-11-21数据库搜奇网57°c
A+ A-
一般来说,只需你用到了缓存,不管是Redis照样memcache,就可能会涉及到数据库缓存与数据的一致性题目,这里我们以Redis为例。
我们该怎样保证Redis与数据库的一致性呢?
So easy: (引荐进修:Redis视频教程)
更新的时刻,先更新数据库,然后再删除缓存。
读的时刻,先读缓存;假如没有的话,就读数据库,同时将数据放入缓存,并返回相应。
乍一看,一致性题目貌似很好的获得了处理。但细致一想,你会发明照样有题目:假如先更新了数据库,删除缓存的时刻失利了怎样办?那末数据库中是新数据,缓存中是老数据,数据涌现不一致了。
革新计划:
先删除缓存,后更新数据库。由于纵然背面更新数据库失利了,缓存是空的,读的时刻会从数据库中从新拉,虽然都是旧数据,但数据是一致的。
所以计划就变成了:
更新的时刻,先删除缓存,然后再更新数据库。
读的时刻,先读缓存;假如没有的话,就读数据库,同时将数据放入缓存,并返回相应。
到这里是否是题目就获得了完全的处理了呢?
实在并没有,在高并发的场景下,会涌现如许的状况:数据发作了变动,先删除了缓存,然后去修正数据库。此时还没来得及修正,一个要求过来了,去读缓存,发明缓存空了,去读数据库,读到了预备修正前的旧数据,而且把旧数据放到了缓存。
随后,数据变动递次完成了数据库的修正。那末完了,这个时刻发作数据不一致了......
处理计划:
针对这类状况,能够先把“修正DB”的操纵放到一个JVM行列,背面读要求过来以后,“更新缓存”的操纵也放进同一个JVM行列,每一个行列,关于一个功课线程,根据行列的递次,顺次实行相干操纵,如许就能够保证“更新缓存”一定是在DB修正以后,以保证数据一致性,细致如下图所示:
以上就是redis怎样保证数据一致性的细致内容,更多请关注ki4网别的相干文章!
标签:redis