当前位置: 首页 > news >正文

redis的缓存更新策略

目录

三种缓存更新策略

业务场景:

 主动更新的三种实现

操作缓存和数据库时有三个问题

  1.删除缓存还是更新缓存?

  2.如何保证缓存与数据库的操作的同时成功或失败?

  3.先操作缓存还是先操作数据库?

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


三种缓存更新策略

  1. 内存淘汰(Eviction)策略:Redis在内存不足时,会根据预设的策略选择一些键进行淘汰,释放内存空间。Redis默认提供了以下几种淘汰策略:

    当数据超出可用内存时,Redis将根据配置的淘汰策略进行自动选择。你不需要手动指定淘汰策略,除非你希望自定义新的淘汰策略。

    • LRU(Least Recently Used,最近最少使用):淘汰最长时间未被访问的键。
    • LFU(Least Frequently Used,最不经常使用):淘汰访问频率最低的键。
    • Random(随机):随机选择键进行淘汰。
  2. 超时剔除(TTL,Time To Live):在向Redis存储数据时,可以为每个键设置一个过期时间。一旦过期时间到达,该键会自动被Redis删除。超时剔除策略是一种主动更新策略,适用于需要在一定时间后自动移除数据的场景。

  3. 主动更新:当你在操作数据库时,同时对Redis进行操作,以保持数据的一致性。这可以通过在操作数据库之后,更新或重置对应的Redis键值对来实现。

业务场景:

低一致性需求:使用内存淘汰机制。例如店铺类型的查询缓存
高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存

 主动更新的三种实现

操作缓存和数据库时有三个问题

  1.删除缓存还是更新缓存?

        更新缓存:每次更新数据库都更新缓存,无效写操作较多(不建议采用)

        删除缓存:更新数据库时让缓存失效,查询时再更新缓存

  2.如何保证缓存与数据库的操作的同时成功或失败?

        单体系统,将缓存与数据库操作放在一个事务

        分布式系统,利用TCC等分布式事务方案

  3.先操作缓存还是先操作数据库?

        一定要先操作数据库,再删除缓存,如果先删除缓存,再操作数据库在多线程的情况下,会导致缓存拿到数据库旧的数据

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

1. 低一致性需求:使用 Redis 自带的内存淘汰机制
2. 高一致性需求:主动更新,并以超时剔除作为兜底方案

读操作:

缓存命中则直接返回
缓存未命中则查询数据库,并写入缓存,设定超时时间
写操作:
先写数据库,然后再删除缓存
要确保数据库与缓存操作的原子性
http://www.lryc.cn/news/111814.html

相关文章:

  • Android应用开发(6)TextView进阶用法
  • Matlab滤波、频谱分析
  • 车载软件架构 —— 车载软件入侵检测系统
  • “深入解析JVM内部机制:理解Java虚拟机的工作原理“
  • FPGA初步学习之串口发送模块【单字节和字符串的发送】
  • Kotlin重点理解安全性
  • 基于Java+SpringBoot+SpringCloud+Vue的智慧养老平台设计与实现(源码+LW+部署文档等)
  • Spring中的全局异常处理
  • 【安全测试】Web应用安全之XSS跨站脚本攻击漏洞
  • LeNet卷积神经网络-笔记
  • 使用XMLHttpRequest实现文件异步下载
  • Lombok 的安装与使用
  • springBean生命周期解析
  • 人工智能轨道交通行业周刊-第54期(2023.7.31-8.6)
  • Docker Compose 使用方法
  • HTML 初
  • IPv6地址分类,EUI-64转换规则
  • Nginx安装部署
  • 物联网|按键实验---学习I/O的输入及中断的编程|读取I/O的输入信号|中断的编程方法|轮询实现按键捕获实验-学习笔记(13)
  • Hadoop-HDFS的Namenode及Datanode(参考Hadoop官网)
  • C:通过alarm发送信号
  • 如何将 dubbo filter 拦截器原理运用到日志拦截器中?
  • 【java】【maven】【基础】MAVEN安装配置介绍
  • 【C语言进阶】指针的高级应用(下)
  • 【uniapp APP隐藏顶部的电量,无线,时间状态栏与导航栏】
  • 微信小程序前后页面传值
  • 没有jodatime,rust里怎么比较两个日期(时间)的大小呢?
  • 【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板18
  • C语言假期作业 DAY 14
  • Maven-生命周期及命令