• 一个设置过期时间的方案


    一般设置过期时间,是可以使用一个定时器不停的删除过期的数据。
    但是这样就存在一个不准确的问题,因为定时器的时间不能设置的太短,否则就太消耗资源了。
    但是如果在数据中加上过期时间,在数据被请求的时候跟当前的时间对比,如果数据过期,再返回数据过期(同时还可以删掉数据),而不是找不到数据才说数据过期,这样也是可以的。
    同时可以再加上一个时间较长的定时器,用来处理已经过期而没有被请求到的数据,这样就完善了。
    代码
    // 一个临时数据存放方案
    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);
  • 相关阅读:
    JavaScript字面量
    JavaScript一元运算符、二元运算符和三元运算符
    JavaScript变量声明与变量声明提前
    JavaScript作用域链
    JavaScript变量污染
    语法糖
    JavaScript包装对象
    JavaScript全局变量与局部变量
    JavaScript标识符
    JS函数命名规范
  • 原文地址:https://www.cnblogs.com/lswit/p/8865712.html
Copyright © 2020-2023  润新知