使用节点缓存模块不缓存AWS Lambda中的数据

时间:2019-01-09 20:37:34

标签: node.js npm aws-lambda

我正在使用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之类的全局变量来实现相同的情况时,该值将被缓存。谁能解释一下这方面的行为。

1 个答案:

答案 0 :(得分:0)

由于Lambda的工作方式,您无法在Lambda中使用节点缓存。

Lambda使用的存储不是持久性的。 Lambda在容器中运行。在某些情况下,您可能会重用容器,并且缓存的数据仍然可用,但这是非常不可靠的。

如果要缓存数据,则应查看其他服务,例如Elasticache,或者甚至可以按需使用DynamoDB。