美文网首页
js 实现一个简单的字符串缓存

js 实现一个简单的字符串缓存

作者: 字字经心 | 来源:发表于2023-03-31 20:45 被阅读0次

后端用node.js 写的,用js 简单实现一个字符串缓存的工具类。时间紧急实现逻辑比较粗糙,还有很多能改进的地方。

思路

思路:缓存的时候需要,value/expire_time/key 三个参数,base64_encode(value)#expire_time 的方式把值写入到文件中保存,可以将key 值作为文件名。

也可以base64_encode(key) 作为文件名,把value/expire_time 缓存在文件中。

代码实现

const fs = require('fs');

/**
 * 简单实现的缓存字符串的方法,很粗糙
 */
class fileCache {
    /**
     * 缓存字符串
     * @param key
     * @param value
     * @param expire_time 失效时间ms, 默认到未来两个小时
     * @returns {boolean}
     */
    set(key, value, expire_time = 0) {
        try {
            let file = key;
            if (!expire_time) {
                expire_time = this.current_time() + 7200 * 1000;
            }
            // fs.write/fs.open之类的方法是异步的,在这里不能用。
            value = value + "#" + expire_time;
            fs.writeFileSync(file, value, {flag: 'w'});
            return true;
        } catch (err) {
            console.error(err);
            return false;
        }
    }

    /**
     * 获得缓存
     * @param key
     * @returns {string}
     */
    get(key) {
        try {
            let file = key;
            // fs.readFile 是个异步方法,这里不适合用
            let value = fs.readFileSync(file, 'utf8');
            console.log('data:', value);
            value = value.split('#');
            let expireTime = value[1];
            if (this.current_time() > expireTime) {
                return '';
            }
            return value[0];
        } catch (err) {
            console.error(err);
            return '';
        }
    }

    /**
     * 当前时间戳ms
     * @returns {number}
     */
    current_time(){
        // ms
        return new Date().getTime();
    }
}
module.exports =  new fileCache();

测试例子

const fileCache = require("fileCache");

let key = "xxx_token";
if(fileCache.get(key)){
        return fileCache.get(key);
}

fileCache.set(key, token);

相关文章

网友评论

      本文标题:js 实现一个简单的字符串缓存

      本文链接:https://www.haomeiwen.com/subject/rqicrdtx.html