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
})
.set('hello', 'memcachier', {expires:0}, function(err, val) {
mcif(err != null) {
console.log('Error setting value: ' + err)
}
})
.get('hello', function(err, val) {
mcif(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;
.get(view_key, function(err, val) {
mcif(err == null && val != null) {
// Found the rendered view -> send it immediately
.send(val.toString('utf8'));
resreturn;
}// Cache the rendered view for future requests
.sendRes = res.send
res.send = function(body){
res.set(view_key, body, {expires:0}, function(err, val){/* handle error */})
mc.sendRes(body);
res
}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:
.delete('_view_cache_/?n=' + req.body.n, function(err, val){/* handle error */}); mc
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
.use(session({
appsecret: 'ClydeIsASquirrel',
resave: 'false',
saveUninitialized: 'false',
store: new MemcachedStore({
servers: [process.env.MEMCACHIER_SERVERS],
prefix: '_session_'
}); }))