2015-03-20 3 views
6

Ich baue einen Server mit SailsJS (ein Framework auf Express gebaut) und ich muss ein Objekt im Speicher zwischen Anfragen halten. Ich würde dies gerne tun, weil das Laden zu/von einer Datenbank viel zu lange dauert. Irgendwelche Ideen wie ich das machen könnte?Object in Memory zwischen Anfragen mit SailsJS/Express

Hier ist mein Code:

var params = req.params.all(); 

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

Insbesondere die fromJSON() Funktion viel zu lange dauert, und ich würde halten lieber das synapticNetwork Objekt im Speicher, während der Server (aka läuft es geladen werden, wenn der Server startet und nur. regelmäßig speichern).

+1

Haben Sie sich eine Caching-Bibliothek angesehen? –

+0

Nein, habe ich nicht, hast du irgendwelche Vorschläge? – Rob

+1

Jede Caching-Bibliothek würde den Job erledigen, googeln Sie einfach nach ihnen und wählen Sie eine, die Ihnen am besten entspricht. Der einfachste Weg ist, Ihr Objekt einer globalen Variablen zuzuweisen und darauf zuzugreifen (idealerweise verschieben Sie es zu einem separaten Modul und benötigen es dort, wo Sie es brauchen) –

Antwort

12

Es gibt viele Bibliotheken für Caching-Zwecke, von denen einer node-cache ist, wie Sie erwähnt haben. Alle von ihnen ähnlich api teilen:

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

// now just use the cache 

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

Sie auch Ihr eigenes Modul implementieren können und es nur erforderlich, wo immer Sie benötigen:

var cache = {}; 

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

Wäre nicht ein einfacher 'Dienst' im Dienstverzeichnis dafür ausreichend? – rahulserver

+0

@rahulserver das ist, was die zweite Lösung ist –

+0

danke für die Klärung! – rahulserver

1

Es gibt eine Menge von potentiellen Lösungen sind. Die erste und offensichtlichste verwendet eine Session-Middleware für Express. Die meisten Web-Frameworks sollten eine Art Sitzungslösung haben.

https://github.com/expressjs/session


Die nächste Option wie ein Cache-Dienstprogramm zu verwenden wäre, was Vsevolod vorgeschlagen. Es funktioniert fast genauso wie eine Sitzung, außer wenn die Daten an einen Benutzer/eine Sitzung gebunden werden müssen, müssen Sie eine Art von Kennung in der Sitzung speichern und diese aus dem Cache abrufen. Was ich denke, ist ein bisschen überflüssig, wenn das Ihr Anwendungsfall ist.

Es gibt auch Dienstprogramme, die Ihre Session-Middleware erweitern und Objekte in der Sitzung in einer Datenbank oder anderen Arten von Datenspeichern persistieren, sodass die Sitzungsinformationen auch nach einem Serverneustart nicht verloren gehen. Sie erhalten immer noch die Geschwindigkeit eines In-Memory-Speichers, der jedoch von einer Datenbank unterstützt wird, falls der In-Memory-Speicher weggeblasen wird.


Eine andere Option ist Redis zu verwenden. Sie müssen Ihre Objekte noch serialisieren/deserialisieren, aber Redis ist ein speicherinterner Datenspeicher, in den Sie sehr schnell schreiben und von dem Sie lesen können.

Verwandte Themen