场景

基于 LRU 的缓存是否失效的指标是:是否为最近使用。

在此基础上,新增了 maxAge 字段,表示缓存有效期,数据结构:

maxAge: number // 有效期
data: any // 缓存

为什么增加缓存有效期?

有些数据被频繁访问,按照 LRU 策略,不会失效。

但是数据需要刷新,否则会失去实效性,因此新增一个有效期。

如果过期,强行刷存。

什么时候需要自动续期?

当缓存过期后,去请求接口,更新缓存。如果接口失效,那么需要自动续期。

这种情况一般后端接口挂了,不自动续期,会导致雪崩,降低可用率。

设计思路

新的数据结构设计:

maxAge: number // 有效期
data: any // 缓存
finalExpiration: number // 最终过期时间

在当前时间~有效期之间:缓存有效无需刷新。

在有效期~最终过期时间:缓存失效,可以刷新,自动续期。

在最终过期时间后:不能自动续期。

对于有效期~最终过期,支持两种刷新:

Powered by Fruition