использование модуля кеша узла, не кэширующего данные в лямбда-AWS - PullRequest
0 голосов
/ 09 января 2019

Я использую AWS лямбда. Мы пытались использовать модуль 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 голосов
/ 27 апреля 2019

Вы не можете использовать кэш-узел в Lambda из-за того, как работает Lambda.

Хранилище, которое использует Lambda, не является постоянным. Лямбды бегают в контейнерах. В некоторых случаях вы можете получить повторное использование контейнера, и кэшированные данные все еще доступны, но это очень ненадежно.

Если вы кешируете данные, вам следует обратиться к другим сервисам, таким как Elasticache, или вы даже можете использовать DynamoDB по требованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...