缓存过期时间之逻辑过期

1. 物理不过期(Physical Non-Expiration)
  • 定义 :在Redis中不设置EXPIRE时间,缓存键永久存在(除非主动删除或内存淘汰)。

  • 目的:彻底规避因缓存自动过期导致的击穿(单热点失效)和雪崩(多键集中失效)。

  • 数据示例

    复制代码
    SET user:1001:profile "{\"name\":\"Alice\",\"last_update\":1690000000}"  # 不设置TTL
2. 逻辑过期(Logical Expiration)
  • 定义:在缓存值的元数据中嵌入过期时间戳,业务层自行判断数据新鲜度。

  • 实现方式

    复制代码
    {
      "data": "真实业务数据",
      "expire_time": 1690003600  // 逻辑过期时间戳
    }
  • 触发更新条件

    • 定时任务扫描:后台线程周期性检查逻辑过期时间,主动更新临近过期的数据。
    • 被动触发更新:当业务请求发现数据逻辑过期时,触发异步更新(需结合降级策略)。
3. 后台异步更新(Background Update)
  • 技术实现

    • 独立线程池:与主业务线程隔离,避免更新操作阻塞正常请求。
    • 双缓冲机制:更新时生成新缓存副本,原子替换旧数据,避免脏读。
  • 流程图

    复制代码
    业务请求 → 读取缓存 → 判断逻辑过期 → 否 → 返回数据
                                  ↓是
                              发起到消息队列 → 后台Worker消费 → 更新DB → 刷新缓存

二、逻辑过期解决缓存击穿的实践

1. 缓存击穿(Cache Breakdown)
  • 传统问题场景:热点Key突然失效,瞬时高并发请求穿透至数据库。
  • 本方案优势
    • 无物理失效:热点Key永不自动删除,直接避免击穿触发条件。
    • 逻辑更新异步化 :即使业务认为数据过期,更新操作由后台线程异步处理,前端请求无需等待,降级返回稍旧数据或进入队列等待。
相关推荐
探索java21 分钟前
Spring lookup-method实现原理深度解析
java·后端·spring
lxsy28 分钟前
spring-ai-alibaba 之 graph 槽点
java·后端·spring·吐槽·ai-alibaba
梦幻通灵1 小时前
IDEA查看源码利器XCodeMap插件
java·intellij-idea
Ashlee_code1 小时前
南太平洋金融基建革命:斐济-巴新交易所联盟的技术破局之路 ——从关税动荡到离岸红利,跨境科技如何重塑太平洋资本生态
java·开发语言·科技·金融·重构·web3·php
隐-梵1 小时前
2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
java·开发语言·windows·c#·.net
阿萨德528号2 小时前
5、生产Redis高并发分布式锁实战
数据库·redis·分布式·缓存
叉烧钵钵鸡2 小时前
Java ++i 与 i++ 底层原理
java·开发语言·后端
hqxstudying2 小时前
SpringAI的使用
java·开发语言·人工智能·springai
狐小粟同学2 小时前
JAVAEE--4.多线程案例
java·开发语言
the beard2 小时前
RabbitMQ:基于SpringAMQP声明队列与交换机并配置消息转换器(三)
java·开发语言·rabbitmq·intellij idea