【问题标题】:count number of sessions in connect-redis计算 connect-redis 中的会话数
【发布时间】:2014-07-16 02:40:24
【问题描述】:

在使用 connect-redis 进行会话时,我一直在努力计算用户数或会话 ID。我提到过这个:http://expressjs.com/guide.html#users-online

var express = require('express');
//var redis = require('redis');
//var db = redis.createClient();
var app = express();
var RedisStore = require('connect-redis')(express);


app.use(express.cookieParser());
app.use(express.session({
    store: new RedisStore({
        host: 'localhost',
        port: 6379,
        db: 2,
        pass: 'RedisPASS'
    }),
    secret: '1234567890QWERTY'
}));

app.use(function(req, res, next){
    var ua = req.headers['user-agent'];
    db.zadd('online', Date.now(), ua, next); 
});

app.use(function(req, res, next){
    var min = 60 * 1000;
    var ago = Date.now() - min;
    db.zrevrangebyscore('online', '+inf', ago, function(err, users){
        if (err) return next(err);
        req.online = users;
        next();
    });
});

app.get('/', function(req, res) {
    db.zadd('online', Date.now(), req.sessionID, next);

});

app.get('/', function(req, res){
    res.send(req.online.length + ' users online');
});

app.listen(3000);

显然,上面的代码不理解变量db,因为没有明确的redis.createClient(); ... connect-redis 在内部执行redis.createClient 吗?

请帮助了解如何使用 connect-redis 计算会话 id 的数量。

【问题讨论】:

    标签: node.js express redis


    【解决方案1】:

    是的,connect-redis 确实在内部使用 redis.createClient() 如果您只向它提供上面的凭据。您也可以直接将其传递给客户端。

    var redisClient = redis.createClient(6379, "127.0.0.1", { auth_pass: "RedisPASS" });
    redisClient.select(2);
    
    app.use(express.session({
        store: new RedisStore({
             client: redisClient
        }),
        secret: '1234567890QWERTY'
    }));
    

    要获取会话数,您需要在 redis 中查询与该键前缀匹配的键集。对于 connect-redis,这是“sess:”。

    redisClient.keys("sess:*", function(error, keys){
        console.log("Number of active sessions: ", keys.length);
    });
    

    正如他们在 redis 文档中所述,keys 命令需要线性时间,因此在大型系统中,频繁查询它不是一个好主意。最好保留一个单独的计数器,当用户登录时递增,用户注销时递减。

    【讨论】:

    • 所以“一个单独的计数器”例如是一个不会过期的 Redis 键值?
    猜你喜欢
    • 2020-05-31
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多