文章目录

  • 1.redis的缓存更新的三种策略
    • 1.1 内存淘汰
    • 1.2 超时剔除
    • 1.3 主动更新
  • 2. 缓存更新策略的最佳实践方案:

缓存的更新是redis为了节约内存而设计出来的东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把它成为淘汰更合适。

1.redis的缓存更新的三种策略

1.1 内存淘汰

redis自动进行,当redis内存达到咱们设定的max-memery的时候会自动触发淘汰机制,淘汰调一些不重要的数据(自己可以设置策略方式)

1.2 超时剔除

当我们给redis设置了过期时间ttl之后,redis会将超时的数据进行删除,方便咱们继续使用缓存。

1.3 主动更新

我们可以手动条用方法把缓存删掉,通常用于解决缓存和数据库不一致问题。

主动更新有分三种方式:

  1. 由缓存的调用者,在更新数据库的同时更新缓存。

  2. 缓存和数据库整合为一个服务,由服务来维护一致性。调用者调用该服务(对外提供一个透明的服务),无需关系缓存一致性问题。

  3. 调用者只操作缓存,有其他线程异步的将缓存持久化到数据库,保证最终一致。(类似于数据库的索引,一个索引更新在没有提交事务时,修改了100次只有最后一次有效,但这会使效率降低。)

如果采用第一个方案,那么假设我们每次操作数据库后,都操作缓存,但是中间如果没有人查询,那么这个更新动作实际上只有最后一次生效,中间的更新动作意义并不大,我们可以把缓存删除,等待再次查询时,将缓存中的数据加载出来

  • 删除缓存还是更新缓存?

    • 更新缓存:每次更新数据库都更新缓存,无效写操作较多
    • 删除缓存:更新数据库时让缓存失效,查询时再更新缓存
  • 如何保证缓存与数据库的操作的同时成功或失败?

    • 单体系统,将缓存与数据库操作放在一个事务
    • 分布式系统,利用TCC等分布式事务方案
  • 先操作缓存还是先操作数据库?

    • 先删除缓存,再操作数据库 (第一种方案)
    • 先操作数据库,再删除缓存

应该具体操作缓存还是操作数据库,我们应当是先操作数据库,再删除缓存,原因在于,如果你选择第一种方案,在两个线程并发来访问时,假设线程1先来,他先把缓存删了,此时线程2过来,他查询缓存数据并不存在,此时他写入缓存,当他写入缓存后,线程1再执行更新动作时,实际上写入的就是旧的数据,新的数据被旧数据覆盖了。

  • redis的读写是微秒级别的,但是数据库的更新时远远比redis的读写慢的。

三者之间比较

2. 缓存更新策略的最佳实践方案:

  1. 低一致性需求:使用Redis自带的内存淘汰机制

  2. 高一致性需求:主动更新,并以超时剔除作为兜底方案

  • 读操作:

    • 缓存命中则直接返回
    • 缓存未命中则查询数据库,并写入缓存,设定超时时间
  • 写操作:

    • 先写数据库,然后再删除缓存
    • 要确保数据库与缓存操作的原子性

Redis的缓存更新策略相关推荐

  1. 【Redis】缓存更新策略

    1. 缓存更新策略综述 内存淘汰 不用自己维护,利用 Redis 自己的内存淘汰机制 (内存不足时,触发策略,默认开启,可自己配置),其可在一定程度上保持数据一致性 超时剔除 给数据添加 TTL,到期 ...

  2. Redis:缓存一致性问题(缓存更新策略)

    Redis缓存的一致性 1. 缓存 1.1 缓存的作用: 1.2 缓存的成本: 2. 缓存模型 3. 缓存一致性问题 3.1 引入 3.2 解决 (1) 主动更新:先更新数据库,再手动删除缓存 (2) ...

  3. 掌握分布式环境缓存更新策略,提高缓存与数据库双写一致性!

    概述 随着时代的发展,服务系统架构也已经由最初的单体架构转变为分布式.微服务架构模式. 从数据体量上来看,各系统存储的数据量越来越大,数据的查询性能越来越低. 此时,就需要我们不断的进行优化,最常用的 ...

  4. 缓存更新策略概览(Caching Strategies Overview)

    缓存是一种用于更快数据检索的数据存储技术.从某种意义上说,它比从其主存储(如数据库)获取数据更快.为了实现这一点,我们通常缓存频繁请求或计算的数据.现在,让我们仔细看看可能需要考虑的不同缓存策略.请记 ...

  5. 为什么你的缓存更新策略是先更新数据库后删除缓存,讲讲其他的情况有什么问题?...

    2019独角兽企业重金招聘Python工程师标准>>> 问题:怎么保持缓存与数据库一致? 要解答这个问题,我们首先来看不一致的几种情况.我将不一致分为三种情况 数据库有数据,缓存没有 ...

  6. 【Redis学习03】redis缓存及其更新策略

    文章目录 1. 什么是缓存 2. 添加redis缓存 2.1 缓存商铺信息 3. 缓存更新策略 3.1 缓存更新策略方法 3.2 主动更新策略 3.3 缓存更新策略总结 4. 对商铺查询的缓存添加超时 ...

  7. Redis:缓存问题之数据不一致(更新数据库时 主动更新)

    Redis:缓存问题之数据不一致(更新数据库时 主动更新) 关键词 数据源不一样(缓存和db操作非原子性) 1.延时双删 -> 2.TTL -> 3.缓存删除失败记录到日志中,利用脚本提取 ...

  8. Redis缓存过期策略

    转载出处链接 一.背景 线上你写代码的时候,想当然的认为写进 redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责? 常见的有两个问题: 往 redis 写入的数据怎么没了? 可能有同学 ...

  9. Redis 缓存问题(Redis 与 DB 更新一致性问题、缓存击穿、缓存穿透、缓存雪崩)

    Redis 与 DB 更新一致性问题 缓存更新策略 1. 内存淘汰 说明:不用自己维护,利用 Redis 的内存淘汰机制,当内存不足时自动淘汰部分数据,下次查询时更新缓存 一致性:差 维护成本:无 2 ...

最新文章

  1. dos命令行设置网络优先级_海康威视二层接入网络交换机DS-3E2326-H 26口_DS-3E2326-H_DS-3E2326-H...
  2. IDA无法反编译 and 提示错误
  3. DataTable的Ajax使用
  4. matlab数值计算pdf_Gnuplot科学绘图(九)——栅格以及方程数值解估算
  5. 小程序自定义组件:摇奖小游戏
  6. 小程序之地图标注以及导航
  7. 83、冗余网关配置实验之VRRP
  8. 安装Oracle驱动ojdbc8到本地maven仓库
  9. xelatex编译时提示缺少字体
  10. itunes安装失败 “apple应用程序支持安装失败”
  11. DB2错误SQL1585N
  12. 坐标求四面体体积_给定4个点坐标求四面体体积
  13. 平平淡淡的真,安安静静的情
  14. 逆向工程-REVERSE知识手册
  15. 绩效考核过程中会遇到的问题
  16. 关于数据库、数据治理、AIOps的这些痛点,你需要知道! | DAMS 2020
  17. 想要快乐陪伴左右吗?多种提高多巴胺的方法送给你
  18. 2022年全国最新中级消防设施操作员考试模拟题库及答案
  19. android端富文本编辑器HRichEditor
  20. 【阅读】Leaf——美团点评分布式ID生成系统

热门文章

  1. 最小生成树、次小生成树
  2. linux添加新字体
  3. Zynq7020 DMA裸板测试
  4. spring循环依赖解决办法
  5. 扫描探针显微镜(SPM)数据采集和处理软件
  6. Activity之间的信息传递
  7. 《数据挖掘与数据化运营实战:思路、方法、技巧与应用》第一章 什么是数据化运营
  8. Canal与DataX等工具的区别
  9. mysql udf扩展_C++ 如何编译 MySQL 扩展库(UDF)
  10. 重磅!谷歌2020学术指标(Scholar Metrics)发布!CVPR高居计算机领域榜首