Node.js 实现简单的无侵入式缓存框架的方法

2020-06-17 06:57:57易采站长站整理


var cache = {
has: (key) => {
if (key === 1) return true
else return false
},
get: (key) => {
return "cached value " + key
}
}

定义测试方法


function request(key) {
return 'value of ' + key
}

应用注入

request = request.cache()

执行一下


request(2)
"value of 2"
request(1)
"cached value 1"

看到结果按照预期输出,完美!

最后实现

项目引用了 

memory-cache
作为基础缓存库,实现了相关的缓存功能。


simple-cache.js
const cache = require('memory-cache');
Function.prototype.cache = function (cachekey, time) {
var _self = this;
return function() {
var key = cachekey(arguments);
var value = cache.get(key);
if (!value) {
value = _self.apply(this, arguments)
cache.put(key, value, time);
}
return value;
}
}
var simpleCache = {
cache: function(f, cacheKey, cacheTime) {
return f.cache(cacheKey, cacheTime);
}
}
module.exports = simpleCache
sample.js
const cache = require('simple-cache-z').cache;
function cachekey(args) {
return args[0]}
function request(key) {
return (new Date()).getTime();
}
request = cache(request, cachekey, 5000);
console.log('request 1 ', request(1));
setTimeout(() => {
console.log('request 2 ', request(2));
}, 1000)
setTimeout(()=> {
console.log('request 1 ', request(1))
console.log('request 1 ', request(1))
console.log('request 1 ', request(1))
console.log('request 2 ', request(2));
console.log('request 2 ', request(2));
console.log('request 2 ', request(2));
}, 2000);
setTimeout(()=> {
console.log('request 1 ', request(1));
console.log('request 1 ', request(1));
console.log('request 1 ', request(1));
console.log('request 2 ', request(2));
console.log('request 2 ', request(2));
console.log('request 2 ', request(2));
}, 10000);

输出结果

request 1  1563000551142
// 1000 ms
request 2  1563000552150
// 2000 ms
request 1  1563000551142
request 1  1563000551142
request 1  1563000551142
request 2  1563000552150
request 2  1563000552150
request 2  1563000552150
// 10000 ms
request 1  1563000561151
request 1  1563000561151
request 1  1563000561151
request 2  1563000561151
request 2  1563000561151
request 2  1563000561151

大功告成!