redis

redis双写一致性

2021-07-02  本文已影响0人  念䋛

Redis的双写一致性,笔者认为主要是关心多线程执行结束之后,redis中的缓存数据和数据库保持一致或者当前的redis是删除状态,等待下一查询数据的时候更新缓存,而不是关注多线程之间的线程安全问题。
Redis双写一致性发生场景,是在高并发的项目中出现的,普通的项目发生的概率很低,甚至不用考虑不一致情况的发生。
了解了什么是redis 的双写一致性,那么我们就分析如何最大可能的保证双写一致性。

  1. 先更新数据库再更新缓存


    image.png

    数据库store为6 redis为10

  2. 先删除缓存再更新数据库


    image.png

    数据库store为6 redis为10

  3. 先删除缓存在更新数据库(双删)


    image.png

    延时双删策略最终将redis删除掉,等下一次查询的时候会把最新的数据缓存到redis中,虽然解决了缓存不一致性,但是牺牲了性能,为了小概率事件,牺牲每一次访问效率,也不可取,当然也可以新开启一个线程去删除redis,
    但是毕竟多了一个线程.
    4.先更新数据库在删除缓存


    image.png
    数据库store为6 redis为10
    那再项目中该如何保证双写一致性呢,笔者建议使用4,把原有的图更改一下
    image.png

    因为查询数据库的时间小于更新数据库的时间,很有可能先更新redis,再删除redis,这样保证了一致性。
    如果对缓存一致性敏感的话,那只能使用锁机制,当然可以使用读写锁,保证效率。

上一篇下一篇

猜你喜欢

热点阅读