redis双写一致性

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,这样保证了一致性。
    如果对缓存一致性敏感的话,那只能使用锁机制,当然可以使用读写锁,保证效率。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 你知道的越多,你不知道的越多点赞再看,养成习惯本文 GitHub https://github.com/JavaF...
    敖丙Kirk阅读 5,522评论 1 10
  • 双写一致性 当我们更新了mysql中的数据后也可以同时保证redis中的数据同步更新; 在读取缓存通常按照下图的流...
    virtual灬zzZ阅读 3,843评论 0 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 127,307评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,296评论 0 4