基于 LRU 的缓存是否失效的指标是:是否为最近使用。
在此基础上,新增了 maxAge 字段,表示缓存有效期,数据结构:
maxAge: number // 有效期
data: any // 缓存
为什么增加缓存有效期?
有些数据被频繁访问,按照 LRU 策略,不会失效。
但是数据需要刷新,否则会失去实效性,因此新增一个有效期。
如果过期,强行刷存。
什么时候需要自动续期?
当缓存过期后,去请求接口,更新缓存。如果接口失效,那么需要自动续期。
这种情况一般后端接口挂了,不自动续期,会导致雪崩,降低可用率。
新的数据结构设计:
maxAge: number // 有效期
data: any // 缓存
finalExpiration: number // 最终过期时间
在当前时间~有效期之间:缓存有效无需刷新。
在有效期~最终过期时间:缓存失效,可以刷新,自动续期。
在最终过期时间后:不能自动续期。
对于有效期~最终过期,支持两种刷新: