欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【Eureka 缓存机制】

【Eureka 缓存机制】

2025/2/28 10:50:18 来源:https://blog.csdn.net/weixin_39439156/article/details/145891075  浏览:    关键词:【Eureka 缓存机制】

今天简单介绍一下Eureka server 的缓存机制吧✌️✌️✌️

一、先来个小剧场:服务发现的"拖延症"

想象你是个外卖小哥(客户端),每次接单都要打电话问调度中心(Eureka Server):“现在哪个餐馆(服务)还开着啊?”
如果每次都打电话问,调度中心会被烦死。于是Eureka说:“别老问了!我给你个小本本(缓存),每30秒自己更新一次吧!”

这就是Eureka缓存的初心——用空间换时间,用缓存换太平


二、缓存藏宝图:客户端和服务端都有小金库

1. 客户端的小抽屉(应用层缓存)
// 这就是你代码里常见的那个"小本本"
List<ServiceInstance> instances = discoveryClient.getInstances("PAYMENT-SERVICE");
  • 📌 第一次访问:老老实实去Eureka Server查通讯录
  • 🔄 后续请求:直接翻自己的小本本(默认每30秒刷新一次)
  • ⚠️ 小坑:如果这时候有新餐馆开张,你得等30秒后才知道
2. 客户端的保险箱(本地缓存)
  • 📦 就算Eureka Server挂了,还能用上次记住的餐馆列表
  • ⏳ 默认存活时间:30分钟(就像冷冻食品的保质期)
3. 服务端的VIP包厢(响应缓存)
  • 🧊 会把查询结果存在内存里(默认180秒)
  • 🚀 下次同样查询直接给缓存,快得像闪电

三、缓存套娃:Eureka的俄罗斯娃娃结构

  1. 第一层:注册表大仓库(读写分离)

    • 写操作:新餐馆注册直接进小黑屋(写缓存)
    • 读操作:从明亮的展示厅(读缓存)拿数据
  2. 第二层:定时更新的展示柜

    • 每30秒把小黑屋里的新数据搬到展示厅(默认值)
    • 像商场每天补货一样规律
  3. 第三层:客户端的小抄本

    • 每家外卖站(客户端)都有自己的进货清单
    • 定期去总店(服务端)核对最新清单

四、当缓存变成双刃剑:那些年我们踩过的坑

场景1:新餐馆开张没人知
  • 🕒 现象:上线新服务后,其他服务过会儿才看到
  • 🛠️ 解法:调小client.refresh.interval(别小于30秒!)
场景2:关店告示贴得慢
  • 💀 现象:服务挂了但客户端还在调用
  • 🛡️ 防御:启用健康检查 + 调小server.eviction-interval-timer-in-ms
场景3:缓存雪崩
  • ❄️ 风险:所有客户端同时刷新缓存把服务端压垮
  • 🔀 妙招:设置随机抖动(jitter)让刷新时间错开

五、手把手教你玩转缓存开关

# 客户端配置:让你掌控刷新节奏
eureka:client:registry-fetch-interval-seconds: 30  # 刷新间隔disable-delta: false                 # 是否用增量更新# 服务端配置:控制缓存寿命
eureka:server:response-cache-update-interval-ms: 30000  # 响应缓存更新间隔

六、缓存冷知识:你可能不知道的彩蛋

  1. 紧急逃生口:通过/eureka/apps接口能直接看到原始数据
  2. 记忆清除术:调用DiscoveryClient.refresh()强制刷新
  3. 时间魔法:服务端的注册表其实是三层时间戳结构(注册时间、续约时间、心跳时间)

最后缓存机制的源码分析,下一篇出,感谢老铁们的一键三连!收徒ing

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词