Node.js 获取connect redis上现有会话的列表

Node.js 获取connect redis上现有会话的列表,node.js,session,express,node-redis,Node.js,Session,Express,Node Redis,我必须实现一个功能,如果登录的用户数超过了允许的用户数,那么就不应该允许更多的用户登录。是否有方法获取正在运行/现有会话的列表?以及如何销毁特定会话?任何人都可以提供一个例子,因为我是新的节点。我的部分代码是: express = require('express'), session = require('express-session'), RedisStore = require('connect-redis')(session), bodyParser = require('body-p

我必须实现一个功能,如果登录的用户数超过了允许的用户数,那么就不应该允许更多的用户登录。是否有方法获取正在运行/现有会话的列表?以及如何销毁特定会话?任何人都可以提供一个例子,因为我是新的节点。我的部分代码是:

express = require('express'),
session = require('express-session'),
RedisStore = require('connect-redis')(session),
bodyParser = require('body-parser');

redisOpts = {
    pass: config.REDIS_PASS,
    host: config.REDIS_SERVER || null,
    port: config.REDIS_PORT || null
},

sessionStore = new RedisStore(redisOpts),

app = express();

app.use(session({
   store: sessionStore,
   secret: 'XXX',
   resave: true,
   saveUninitialized: true
}));
编辑

express = require('express'),
session = require('express-session'),
redis   = require("redis"),
RedisStore = require('connect-redis')(session),
bodyParser = require('body-parser');

redisOpts = {
    pass: config.REDIS_PASS,
    host: config.REDIS_SERVER || null,
    port: config.REDIS_PORT || null
},

redisClient = redis.createClient(redisOpts.port, redisOpts.host, { auth_pass: redisOpts.pass }),
sessionStore = new RedisStore(redisClient),
app = express();

app.use(session({
   store: sessionStore,
   secret: 'XXX',
   resave: true,
   saveUninitialized: true
}));
如果检查会话列表,则在app.js内部登录函数中:

redisClient.keys("sess:*", function(error, keys){
        console.log("Number of active sessions: ", keys.length);
        console.log(keys);
});
编辑后,在connect-redis.js的这一行中抛出一个错误:

 TypeError: this.client.unref is not a function
 if (options.unref) this.client.unref();
感谢您的帮助


非常感谢。不过,您需要直接查询redis收藏

由于connect redis在内部使用
redis.createClient()
,因此可以在中传递redis客户端的实例,而不是凭据。比如:

//I've kept your redisOpts for clarity
redisOpts = {
    pass: config.REDIS_PASS,
    host: config.REDIS_SERVER || null,
    port: config.REDIS_PORT || null
},

var redisClient = redis.createClient(redisOpts.port, redisOpts.host, { auth_pass: redisOpts.pass });
现在,像以前一样配置您的redis存储,但传入redis客户端

sessionStore = new RedisStore(redisClient)
您现在可以使用相同的
redisClient
查询会话密钥的数量

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

我通常为每个会话设置一个名称,如:

var redis_client=redis.createClient();
redis_client.client('setname','tour client');
然后当我想检查它时:

redis_client.multi().client(['list']).exec(函数(错误,结果){
变量对=结果[0]。拆分(“”);
pairs.forEach(函数(pair){
var kv=对分裂('=');
如果(kv[0]=='name'&&kv[1]=='some name looking')
发现=真;
});
如果(找到){
//一些逻辑
}
});

这给出了一个错误:TypeError:This.client.unref不是此行的函数->if(options.unref)This.client.unref();在connect-redis.js中,该抛出的是什么?当我重新启动节点时,在这一行,嗯,这很奇怪,是库抛出了错误。。。。。您是否可以编辑您的问题以显示您的新代码,将redisClient传递到
RedisStore
hmm,您安装了哪个版本的redisClient?你是通过npm安装的吗?