2016-01-04 3 views
1

Loopback имеет концепцию non-database connectors, включая REST connector.Кэширование Loopback REST-коннектор

Каков правильный способ кэширования получить запросы к такому источнику данных?

+0

Если кто-то уже реализовал что-либо подобное, было бы замечательно поделиться им с сообществом, потому что я тоже ничего не мог найти об этом. – F3L1X79

ответ

1

Интересная мысль ... Я думаю, что вы должны сделать это самостоятельно, создав новый custom remote method и проверить локальный хэш значений:

// in /common/models/myModel.js 

var cache = {}; 

MyModel.lookup = function loopkup(someParam, next) { 

    if (cache[someParam]) { 
    // first see if the value is already in the cache 
    return next(null, cache[someParam]); 

    } else { 
    // otherwise do the REST remote method call... 
    MyModel.restLoopkup(someParam, function lookupCallback(err, data) { 
    if (err) { return next(err); } 

    cache[someParam] = data; // ...and then set the new cache value. 
    next(null, data); 
    }); 
}; 

MyModel.remoteMethod(
    'lookup', 
    { 
    accepts: { arg: 'param', type: 'object', http: { source: 'query' } }, 
    returns: { arg: 'results', type: 'object' }, 
    http: { verb: 'get', path: '/lookup' } 
    } 
); 

Этот код будет создать конечную точку в .../api/MyModels/lookup?param=foobar для вызывающий код для удара. Обратите внимание, что вы, вероятно, захотите также установить время истечения срока для данных и правильно управлять «кешем». Вы также можете использовать что-то вроде хранилища redis для значений вместо встроенной памяти, как это было сделано выше.

Удачи вам!

+0

Считаете ли вы, что было бы легко реализовать глобальный очиститель кэша после любого обновления/создания ModelEntity? Я имею в виду предлагаемое решение. Большое спасибо. – F3L1X79

+0

Легко? Может быть, нет ... но я бы, вероятно, использовал redis cache для этого. Особенно, когда вы загружаете кеш с другими данными. В конце концов, что загрузка памяти повлияет на ваше приложение и использование кеша redis сделает его гораздо более масштабируемым и управляемым. – jakerella

Смежные вопросы