一个设置过期时间的方案

一般设置过期时间,是可以使用一个定时器不停的删除过期的数据。
但是这样就存在一个不准确的问题,因为定时器的时间不能设置的太短,否则就太消耗资源了。
但是如果在数据中加上过期时间,在数据被请求的时候跟当前的时间对比,如果数据过期,再返回数据过期(同时还可以删掉数据),而不是找不到数据才说数据过期,这样也是可以的。
同时可以再加上一个时间较长的定时器,用来处理已经过期而没有被请求到的数据,这样就完善了。
代码
// 一个临时数据存放方案
let storeSymbol = Symbol( 'store' );
class Storage {
constructor (createFunc = () => { }, deleteFunc = () => { }) {
this [storeSymbol] = {};
this .createFunc = createFunc;
this .deleteFunc = deleteFunc;
this .dataCleaner = setInterval(() => {
for ( let key of this [storeSymbol]) {
let time = JSON.parse( this [storeSymbol][key]).time;
if (time < Date.now()) {
this [storeSymbol][key] = null ;
}
}
}, 1000 * 60 );
}
setItem(key, val, time) {
let value = JSON.stringify({ val, time });
this [storeSymbol][key] = value;
this .createFunc(key, val, time);
}
getItem(key) {
let value = JSON.parse( this [storeSymbol][key]);
if (value.time < Date.now()) {
this .deleteFunc(key);
delete this [storeSymbol][key];
return null ;
}
return value.val;
}
}
let store = new Storage();
store.setItem( '12' , 'hhh' , Date.now() + 1000 );
console.log(store.getItem( '12' ));
// console.log(store);
setTimeout(() => {
console.log(store.getItem( '12' ));
// console.log(store);
}, 1020 );

转载于:https://www.cnblogs.com/lswit/p/8865712.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值