In Express.js you can use the standard memjs interface to get and set values as described in our Node.js documentation to cache expensive computations or database queries:
var memjs = require('memjs')
var mc = memjs.Client.create(process.env.MEMCACHIER_SERVERS, {
failover: true, // default: false
timeout: 1, // default: 0.5 (seconds)
keepAlive: true // default: false
})
mc.set('hello', 'memcachier', {expires:0}, function(err, val) {
if(err != null) {
console.log('Error setting value: ' + err)
}
})
mc.get('hello', function(err, val) {
if(err != null) {
console.log('Error getting value: ' + err)
}
else {
console.log(val.toString('utf8'))
}
})In addition there are two Express.js specific ways to use Memcache:
To cache rendered views it is best to create an Express.js middleware function as such:
var cacheView = function(req, res, next) {
var view_key = '_view_cache_' + req.originalUrl || req.url;
mc.get(view_key, function(err, val) {
if(err == null && val != null) {
// Found the rendered view -> send it immediately
res.send(val.toString('utf8'));
return;
}
// Cache the rendered view for future requests
res.sendRes = res.send
res.send = function(body){
mc.set(view_key, body, {expires:0}, function(err, val){/* handle error */})
res.sendRes(body);
}
next();
});
}If you use the cacheView middleware you need to take care to invalidate the cache whenever the view needs to be re-rendered, e.g., when the content changes. This can be done by deleting the cached item:
mc.delete('_view_cache_/?n=' + req.body.n, function(err, val){/* handle error */});Memcache works well for sessions that time out, however, since Memcache is a cache and thus not persistent, saving long-lived sessions in Memcache might not be ideal. For long-lived sessions consider a permanent storage option such as your database.
To use sessions in Express you need express-session and to store them in Memcache you need connect-memjs:
$ npm install express-session connect-memjs
Then you can configure sessions in your app:
var session = require('express-session');
var MemcachedStore = require('connect-memjs')(session);
var express = require("express");
var app = express();
// Session config
app.use(session({
secret: 'ClydeIsASquirrel',
resave: 'false',
saveUninitialized: 'false',
store: new MemcachedStore({
servers: [process.env.MEMCACHIER_SERVERS],
prefix: '_session_'
})
}));