【问题标题】:Keep Object In Memory Between Requests with SailsJS/ Express使用 SailsJS/Express 在请求之间将对象保留在内存中
【发布时间】:2015-05-24 05:43:38
【问题描述】:

我正在使用 SailsJS(基于 Express 构建的框架)构建服务器,并且我需要在请求之间将对象保存在内存中。我想这样做是因为将它加载到/从数据库中花费的时间太长了。有什么想法可以做到这一点吗?

这是我的代码:

var params = req.params.all();

Network.findOne({ id: params.id }, function(err, network) {
  if(network) {
    var synapticNetwork = synaptic.Network.fromJSON(network.jsonValue);
    if(synapticNetwork) { ...

具体来说,fromJSON() 函数花费的时间太长,我宁愿在服务器运行时将 synapticNetwork 对象保留在内存中(也就是在服务器启动时加载它并定期保存)。

【问题讨论】:

  • 你看过缓存库吗?
  • 没有,你有什么建议吗?
  • 任何缓存库都可以完成这项工作,只需在谷歌上搜索它们并选择最适合您的。最简单的方法是将你的对象分配给一个全局变量并访问它(最好将它移动到一个单独的模块并在你需要的任何地方使用它)
  • 我找到了节点缓存,这似乎可以工作。你有这样做的例子吗?你也应该回答这个问题,这样我就可以给你投票和复选标记

标签: node.js express sails.js


【解决方案1】:

有很多用于缓存的库,正如您所提到的,其中之一是 node-cache。他们都共享相似的api:

var cache = require('memory-cache');

// now just use the cache

cache.put('foo', 'bar');
console.log(cache.get('foo'))

您也可以实现自己的模块,并在需要的地方使用它:

var cache = {};

module.exports = {
    put: function(key, item) {
        cache[key] = item;
    },
    get: function(key) {
        return cache[key];
    }
}

【讨论】:

  • 服务目录中的简单service 不够吗?
  • @rahulserver 这就是第二个解决方案的意义
【解决方案2】:

有很多潜在的解决方案。第一个也是最明显的一个是使用一些会话中间件来表达。大多数 Web 框架都应该有某种会话解决方案。

https://github.com/expressjs/session


下一个选项是使用 Vsevolod 建议的缓存实用程序。它完成与会话几乎相同的事情,除非数据需要绑定到用户/会话,那么您必须在会话中存储某种标识符并使​​用它从缓存中检索。如果这是您的用例,我认为这有点多余。

还有一些实用程序可以扩展会话中间件并将会话中的对象持久保存到数据库或其他类型的数据存储中,这样即使服务器重新启动后会话信息也不会丢失。您仍然可以获得内存存储的速度,但有数据库支持,以防内存存储被炸毁。


另一种选择是使用Redis。你仍然需要序列化/反序列化你的对象,但是 Redis 是一个内存数据存储,读写速度非常快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 2011-08-07
    • 1970-01-01
    • 2020-12-26
    • 2016-01-19
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    相关资源
    最近更新 更多