登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  Golang >  Go教程

Caffeine 本地缓存设计:热点数据、过期策略与缓存击穿处理

来源:Golang学习网专题原创

时间:2026-06-11 11:03:32 673浏览 收藏

热点配置、字典、权限、商品基础信息等数据如果每次都访问数据库或 Redis,会放大下游压力。本地缓存能降低延迟,但也会带来一致性和容量问题。

Caffeine 本地缓存设计:热点数据、过期策略与缓存击穿处理 思维导图

解决方案思路

按数据变化频率设置过期策略,核心热点使用 maximumSize 限制容量;可接受短暂旧值的数据用 refreshAfterWrite 平滑刷新;关键路径记录命中率和加载耗时。

Caffeine 本地缓存设计:热点数据、过期策略与缓存击穿处理 代码讲解图

Caffeine LoadingCache 示例

LoadingCache cache = Caffeine.newBuilder()
    .maximumSize(100_000)
    .expireAfterWrite(Duration.ofMinutes(10))
    .refreshAfterWrite(Duration.ofMinutes(2))
    .recordStats()
    .build(productService::loadById);

Caffeine 本地缓存设计:热点数据、过期策略与缓存击穿处理 运行逻辑图

运行逻辑

请求先访问本地缓存,命中则直接返回;未命中才访问下游。刷新策略要避免所有实例同一时间失效,也要给异常加载设置兜底,防止缓存击穿。

重点观察指标

  • cache hit rate、eviction count、load time
  • 下游 QPS 和 P99 变化
  • 缓存对象数量与堆内存占用

常见误区

  • 只设置过期不限制最大容量
  • 强一致数据误用本地缓存
  • 缓存加载异常时没有降级策略

参考方案

上线检查

  • 优化前后保留同一口径的指标截图或报告。
  • 先灰度单实例或小流量,观察 P95/P99、错误率和资源指标。
  • 准备回滚开关,避免性能改动影响核心业务。
声明:本文转载于:Golang学习网专题原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>