基于链式事件触发策略,使用单个setTimeout处理过期时间队列
Install
npm install timechain
示例
let timeChain = require('timechain')
let timechain = new timeChain({ timeout: 3000 })
timechain.set('name', 666)
setTimeout(() => {
timechain.get('name')
}, 2000);
timechain.set(function (value) {
console.log(value)
}, 888)
应用场景
-
等待超时回调,例如网络请求超时
-
变量过期删除,例如验证码、优惠券过期
-
计划任务定时器
过期策略
timechain目前采用的是定时策略。计划同时支持多种过期策略,根据不同的数据类型采用最优策略组合。
对于函数类型,依然只能使用定时策略,非函数类型则使用惰性策略 + 定期策略(借鉴于Redis)。
定时删除
在设置变量时激活定时器,仅在队列为空时触发,避免创建多个setTimeout。
惰性删除
在查询时检查变量是否过期,过期则删除,否则继续保留。
定期删除
每隔一段时间批量删除已过期的key
-
优点:简单,效率折中,可以灵活控制删除周期。
-
缺点: 存在矩形周期特征,时间偏差严重。
API
new timeChain(options)
this.set(key, value, timeout)
-
key
* 保存key,允许任意值
-
value
* 保存value,允许任意值
-
timeout
Number 单项超时
设置存储数据的key、value
this.get(key)
通过key获取数据
this.delete(key)
通过key删除数据
this.clear()
清空整个数据队列