在意识到Express会话不是很好之后,我开始使用Redis来存储我的用户会话。
我这样做:
var session = require('express-session');
if (process.env.REDISTOGO_URL) {
var rtg = require("url").parse(process.env.REDISTOGO_URL);
var redis = require("redis").createClient(rtg.port, rtg.hostname);
redis.auth(rtg.auth.split(":")[1]);
} else {
var redis = require("redis").createClient();
}
var RedisStore = require('connect-redis')(session);
var redisOptions = {client: redis};
app.use(session({
store: new RedisStore(redisOptions),
secret: 'honkydory',
name: 'honk'
}));
我的问题是,有没有办法让我在运行时查看Redis数据库?我希望能够监控是否有用户登录以及他们是哪些用户。另外,我想确保它正确地创建和维护会话。
谢谢!
答案 0 :(得分:1)
您可以使用SCAN获取会话密钥列表,然后在需要提取会话数据时迭代这些密钥。
例如(未经测试):
function getSessions(cb) {
var keys = [];
var cursor = 0;
(function next(err, reply) {
if (err) return cb(err);
if (reply) {
cursor = reply[0];
if (reply[1].length > 0)
keys = keys.concat(reply[1]);
if (cursor == 0)
return cb(null, keys);
}
redis.scan(cursor, 'match sess:*', next);
})();
}
// ...
getSessions(function(err, keys) {
if (err) throw err;
if (keys.length) {
redis.mget(keys, function(err, sessionDatas) {
if (err) throw err;
// keys[0] matches with sessionDatas[0], etc.
});
} else
console.log('No sessions');
});