forked from golang/groupcache
-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Zhou Hao edited this page Mar 19, 2019
·
2 revisions
为GroupCache增加超时淘汰机制,是为了能更新key对应的内容。原版作者是不推荐增加超时的,认为GroupCache只适合value不变的情况,这让很多场景变得难以使用。
设计超时机制的初衷,是为了提供一种能挡掉热点请求的Cache,并且支持一定时间后刷新缓存结果。
这里将value的生命周期划分为如下三个阶段:
-
active: 在设定的
expiration
时间内称为活跃期,此时如果Cache命中直接返回Cache结果; -
stale: 超过
expiration
但在stalePeriod
时间内称为陈旧期,此时先load
数据,如果在staleDeadline
时间内返回则用新数据回包,否则使用Cache结果兜底(底层返回结果后,依然会回写Cache触发异步更新); -
expired: 超过
expiration+stalePeriod
时间后,value数据彻底失效,此时等同于没有命中cache,必须等待load
返回数据