我正在使用AWS lambda。我们尝试将node-cache
模块用于某些到期的密钥,以便从另一个api获取数据。即使正在设置数据。当下一个请求到来时,node-cache
无法缓存该数据。
这里是我的示例代码
//not the original code
let ClassService = require("./NodeCacheTest");
exports.handler = async (event) => {
let classService = new ClassService();
classService.getKey("myKey", (err, value)=> {
console.log(value);
});
};
//NodeCacheTest
const NodeCache = require( "node-cache" );
const myCache = new NodeCache();
let CACHEDATA = {
testing: true,
time_to_live: 10
};
class NodeCacheTest {
constructor () {
let obj = { my: "Special", variable: 42 };
myCache.get( "myKey", function( err, value ){
if( err || value == undefined) {
console.log("No value available!!!");
myCache.set( "myKey", obj, 10000 );
console.log("value got cached!!!");
}
});
}
getKey(key, cb) {
let obj = { my: "Special", variable: 42 };
myCache.get( "myKey", function( err, value ){
if( err || value == undefined) {
console.log("No value available!!!");
myCache.set( "myKey", obj, 10000 );
console.log("value got cached!!!");
return cb(null,obj);
} else {
return cb(null, value);
}
});
}
}
module.exports = NodeCacheTest;
每次我使用aws lambda
到达Jmeter
端点时...我看到每个呼叫No value available!!!
都被打印出来。但是,当我使用诸如CACHEDATA
之类的全局变量来实现相同的情况时,该值将被缓存。谁能解释一下这方面的行为。
答案 0 :(得分:0)
由于Lambda的工作方式,您无法在Lambda中使用节点缓存。
Lambda使用的存储不是持久性的。 Lambda在容器中运行。在某些情况下,您可能会重用容器,并且缓存的数据仍然可用,但这是非常不可靠的。
如果要缓存数据,则应查看其他服务,例如Elasticache,或者甚至可以按需使用DynamoDB。