使用SailsJS / Express将请求与对象保存在内存中

我使用SailsJS (一个构build在Express之上的框架)构build一个服务器,我需要在请求之间保留一个对象在内存中。 我想这样做,因为加载到/从数据库是太长了。 任何想法我可以做到这一点?

这是我的代码:

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对象放在内存中,而服务器正在运行(也就是说,在服务器启动时加载它,并定期保存)。

有很多库用于caching目的,其中之一就是你所提到的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]; } } 

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

https://github.com/expressjs/session


下一个选项是使用Vsevolodbuild议的caching工具。 它和会话几乎完全相同,除非数据需要绑定到用户/会话,那么您将不得不在会话中存储某种标识符,并使用它从caching中检索。 如果这是你的用例,我认为这有点多余。

还有一些实用程序会将会话中间件和会话中的持久对象扩展到数据库或其他types的数据存储中,以便在服务器重新启动后会话信息不会丢失。 您仍然可以获得内存中存储的速度,但在数据库的支持下,内存中的存储会被取消。


另一个select是使用Redis 。 你仍然需要序列化/反序列化你的对象,但是Redis是一个内存数据存储,并且超级快速的写入和读取。