如何在多个nodejs实例中共享对象?

时间:2015-12-11 19:37:17

标签: node.js postgresql redis riak

我有一个功能,其中用户发布包含少量userid的数据和一些与这些userid相关的数据,我将其保存到postgresql数据库中。我想将此返回的用户ID保存在某个对象中。

我只想检查此对象中是否存在userid,然后只调用数据库。此检查非常频繁,所以每次检查是否存在数据时都无法访问db那个用户ID。

问题是,我有多个nodejs实例在不同的服务器上运行,所以我怎么能有一个公共对象。

我知道我可以使用redis / riak在服务器上存储键值,但是不想仅针对单个案例增加复杂性/学习。(我之前从未使用过redis / riak。)

有任何建议吗?

1 个答案:

答案 0 :(得分:3)

如果您的数据位于不同服务器上的不同node.js进程中,那么ONLY选项是使用网络跨服务器与某些公共服务器进行通信以获取值。有很多不同的方法可以做到这一点。

  1. 将值放入数据库并始终从公共数据库中读取值
  2. 将一个node.js实例指定为主实例,让所有其他node.js实例在需要时随时询问主数据
  3. 使用网络将值同步到每个node.js进程,以便每个node.js实例在其自己的进程中始终具有当前值
  4. 使用共享文件系统(有点像穷人的数据库)
  5. 由于您已有数据库,因此您可能只想将其存储在已有的数据库中并从那里进行查询,而不是仅为此用途引入另一个带有redis的数据存储。如果可能,您可以让每个进程在一段时间内缓存该值,以提高频繁请求的性能。