redis的缓存更新策略以及如何保证redis与数据库的数据一致性

这篇具有很好参考价值的文章主要介绍了redis的缓存更新策略以及如何保证redis与数据库的数据一致性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

redis的缓存更新策略有这么几种:

1、由应用直接和redis以及数据库相连接:
        查询数据时,应用去redis中查询,查不到的话再由应用去数据库中查询,并将查询结果放在redis;
        更新数据时,由应用去触发redis数据的删除以及数据库的update。
2、应用只跟redis相连接,redis跟数据库连接:
        查询时,应用去redis中查,查不到的话,由redis去数据库中查,将查询到的结果缓存在redis并返回给应用;
        更新时,由应用去更新redis,并且由redis将数据同步到数据库。
3、应用只跟redis相连接,redis跟数据库连接:
        查询数据时,由应用去redis中查询;
        更新数据时,由应用更新到redis中之后就返回,redis异步将数据更新到数据库。
4、应用只跟redis连接,后台服务跟数据库连接:
        查询数据时,由应用去redis中查询;
        由后台服务自动将数据库中的最新数据更新到redis。


        需要注意的是,第一种更新策略,无论是先删除redis中的数据还是先update数据库,都会存在redis中出现脏数据的问题。

        比如:如果我们先删redis再update数据库,那么可能某个请求1删完redis了,还没来得及update 数据库,有另外一个请求2到达要进行查询这条数据,请求2在redis中查不到,就去db查,在db中查到了旧数据,并将旧数据再次放进redis,在请求1完成db的update之后,redis和db出现了数据不一致的情况,redis中出现了脏数据。
        再比如,有一条数据在redis中不存在,在db中存在,有两个请求同时到达,请求1要查询这条数据,请求2要更新这条数据,请求1在redis中未查到这条数据,所以去db查,这时请求2还未完成对于db的更新,所以请求1在db中查到了旧数据,这时请求2完成了db的update,并且删除了redis中的数据[当然现在redis中还是没有这条数据,也就无数据可删],在请求2完成了redis的删除动作之后,请求1将手里之前查到的旧数据又放进了redis。

        解决这个问题,可以用延迟双删策略。


延迟双删策略:

        对于更新操作分三步:先删redis缓存 -> 再update数据库 -> 延迟N秒之后,再删一次redis缓存。

        之所以有第三步,是为了将在这期间其他请求存进redis中的脏数据删除,所以这个延迟时长一定要控制好,延迟必须大于向redis中执行一次写操作的耗时,以便保证在其他请求将脏数据向redis写完成之后再删,否则删了也没效果。但是这个N我们即便是控制得再好也无法完全避免redis的脏数据问题,因为有可能其他的向redis进行脏数据的写请求因为网络等原因而耗时延长,最终导致脏数据还是写进了redis。

        延迟双删策略只能在很大程度上解决redis的脏数据问题,让redis与db达到最终一致性,但不能完全避免,想要完全避免这种情况,可以使用同步锁,让整个的数据更新操作同步执行。文章来源地址https://www.toymoban.com/news/detail-637048.html

到了这里,关于redis的缓存更新策略以及如何保证redis与数据库的数据一致性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis面试题目-如何保证数据库与缓存的数据一致性

    原视频:https://www.bilibili.com/video/BV1Km4y1r75f?p=62vd_source=fa75329ae3880aa55609265a0e9f5d34 由于缓存和数据库是分开的,无法做到原子性的同时进行数据修改,可能出现缓存更新失败,或者数据库更新失败的情况,这时候会出现数据不一致,影响前端业务 先更新数据库,再更新缓存。缓

    2024年02月05日
    浏览(59)
  • 如何保证Redis缓存和数据库的一致性问题

    熟练掌握Redis缓存技术? 那么请问Redis缓存中有几种读写策略,又是如何保证与数据库的一致性问题 今天来聊一聊常用的三种缓存读写策略 首先我们来思考一个问题 写 先更新缓存 再更新数据库 首先如果缓存更新成功但数据库更新失败,会导致数据不一致的问题 其次当请求

    2024年02月14日
    浏览(48)
  • Redis 原理缓存过期、一致性hash、雪崩、穿透、并发、布隆、缓存更新策略、缓存数据库一致性

    redis的过期策略可以通过配置文件进行配置 redis会把设置了过期时间的key放在单独的字典中,定时遍历来删除到期的key。 1).每100ms从过期字典中 随机挑选20个,把其中过期的key删除; 2).如果过期的key占比超过1/4,重复步骤1 为了保证不会循环过度,导致卡顿,扫描时间上限

    2024年02月08日
    浏览(56)
  • Redis缓存更新策略以及常见缓存问题

    缓存就是数据交换的缓冲区(Cache),是存储数据的临时地方,一般读写性能较好,常见缓存: Web应用中缓存有什么作用呢? 降低后端负载 提高读写效率,降低响应时间 缓存的成本: 数据的一致性成本 代码维护成本 运维成本 缓存作用模型: 给一段Redis作为缓存的具体案例代

    2024年02月16日
    浏览(47)
  • 缓存更新策略,先更新数据库还是缓存呢?

    学了这么多,相信大家对缓存更新的策略都已经有了清晰的认识。最后稍稍总结一下。 缓存更新的策略主要分为三种: Cache aside Cache aside 也就是 旁路缓存 ,是比较常用的缓存策略。 (1) 读请求 常见流程 应用首先会判断缓存是否有该数据,缓存命中直接返回数据,缓存未

    2024年02月12日
    浏览(39)
  • 如何保证缓存和数据库的数据一致性

    若数据库更新成功,删除缓存操作失败,则此后读到的都是缓存中过期的数据,造成不一致问题。 同删除缓存策略一样,若数据库更新成功缓存更新失败则会造成数据不一致问题。 若缓存更新成功数据库更新失败, 则此后读到的都是未持久化的数据。因为缓存中的数据是易

    2023年04月19日
    浏览(56)
  • 如何保证数据库、缓存的双写一致?

    在我们日常研发过程中,由于数据库的一些限制,我们经常使用缓存(如:Redis)来提升访问速率。此时,数据库和缓存双写数据就存在一致性问题,这个问题跟开发语言无关,在高并发场景下,问题更加严重。 另外,在面试、工作中也会经常遇到这个问题。所以这里跟大家

    2024年04月12日
    浏览(42)
  • 如何保证数据库和缓存双写一致性?

    如何保证数据库和缓存双写一致性,是面试中经常被问的一个技术问题,程序汪推荐大家有必要好好研究一波 数据库和缓存(比如:redis)双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。 我很负责的告诉大家,该问

    2024年01月18日
    浏览(57)
  • 如何保证缓存与数据库双写时的数据一致性?

    背景:使用到缓存,无论是本地内存做缓存还是使用 Redis 做缓存,那么就会存在数据同步的问题,因为配置信息缓存在内存中,而内存时无法感知到数据在数据库的修改。这样就会造成数据库中的数据与缓存中数据不一致的问题。 共有四种方案: 先更新数据库,后更新缓

    2024年01月24日
    浏览(45)
  • REDIS21_缓存双写一致方案、先更新数据库再删除缓存

    ①. 缓存双写一致性,谈谈你的理解 如果redis中有数据,需要和数据库中的值相同 如果redis中无数据,数据库中的值要是最新值 ②. 什么时候同步直写? 小数据,某条、某一小戳热点数据,要求立刻变更,可以前台服务降价一下,后台马上同步直写 ③. 什么时候异步缓写? 正常业务,马

    2023年04月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包