后端用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);