跨节点服务器上的多个 API 请求维护数据

Maintaining data across multiple API requests on node server

本文关键字:API 请求 维护 数据 节点 服务器      更新时间:2023-09-26

这是我正在处理的问题。

客户端需要使用 API 轮询节点服务器以获取某些数据。为了使节点服务器响应,它需要一个数据集(从数据库中读取)。我想避免在每次投票中读取数据库。如何在多个投票中维护数据集?

如果这是可能的,它是否会对服务器性能产生任何影响。

数据库查询减少始终是一个复杂的问题。 我的解决方案是使数据库查询成为承诺并将其缓存直到过期。

例如:

var cache = {};
var cachedQuery = function(id) {
  if(id in cache) return cache[id];
  return cache[id] = new Promise(function(resolve, reject) {
    db.query('select * from test where id=?', id, function(err, rows) {
      delete cache[id];
      if(err) reject(err);
      else resolve(rows);
    }
  });
}

假设您同时有 100+ 个查询共享相同的请求 ID,这些查询将共享相同的数据库请求。请求在第一个查询到来时建立,查询完成后所有查询将返回相同的结果。

对于更通用的用法,您可以使用 lru-cache 来存储创建的承诺,为其提供到期时间。

您可以使用内存中缓存。这个想法是,在访问数据库之前,请检查缓存中是否存在请求的值。如果是 - 服务它。如果没有 - 从数据库中获取,保存到缓存并返回它。

从内存中服务是您可以获得的最快服务。现有的节点解决方案,如节点缓存。