【问题标题】:Caching Loopback REST connector缓存环回 REST 连接器
【发布时间】:2017-03-16 21:22:05
【问题描述】:

Loopback 有non-database connectors 的概念,包括REST connector

将获取请求缓存到此类数据源的正确方法是什么?

【问题讨论】:

  • 如果有人已经实现了类似的东西,与社区分享它会很棒,因为我也找不到任何关于它的东西。

标签: rest caching loopbackjs


【解决方案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 存储的东西来存储值,而不是像我上面所做的那样使用内存。

祝你好运!

【讨论】:

  • 您认为在更新/创建 ModelEntity 之后实现全局缓存清理器会很容易吗?我的意思是你提出的解决方案。非常感谢。
  • 容易吗?也许不是......但无论如何我可能会为此实现一个redis缓存。尤其是当您开始使用其他数据加载缓存时。最终,内存负载会影响您的应用程序,而使用 redis 缓存将使其更具可扩展性和可管理性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多