Node.js使用redis存储session会话状态达到集群效果

要实现使用redis存储session会话状态达到集群效果,需要安装express-session、connect-redis模块

npm install express-session
npm install connect-redis

这里redis我是采用的一个公用的模块,具体内容如下

配置文件config.js

exports.redisSentinel = {
    host: '192.168.199.55',
    port: 26379,
    opts: { auth_pass: '' }
};

redis客户端的redis.js

var config = require('../../config');

var redisSentinel = require('redis-sentinel-client');
var client = redisSentinel.createClient(config.redisSentinel.port, config.redisSentinel.host, config.redisSentinel.opts);

/*client.auth(config.redis.opts.auth_pass, function() {
    console.log('通过认证');
});*/

client.on('ready', function(res){
    console.log('ready'); 
});

exports.get = function(key, callback) {
    client.on('connect', function(res) {
        client.get(key, callback);
    });
};

exports.set = function(key, value, callback) {
    client.on('connect', function(res) {
        client.set(key, value, callback);
    });
};

//设置值,同时设定过期时间
exports.setEx = function(key, value, timeout, callback) {
    client.on('connect', function(res) {
        client.set(key, value, callback);
        client.expire(key, timeout);
    });
};

在app中应用

var express = require('express');
var redis = require('./modules/system/redis');
var session = require('express-session');
var RedisStore = require('connect-redis')(session);

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
    resave: true, // don't save session if unmodified
    saveUninitialized: false, // don't create session until something stored
    secret: 'love',
    store: new RedisStore({
        client : redis.client   //代表引用公用的redis客户端
    }),
    key:'express.sid'
}));

说明:

参数
client 你可以复用现有的redis客户端对象, 由 redis.createClient() 创建
host   Redis服务器名
port   Redis服务器端口
socket Redis服务器的unix_socket

可选参数
ttl        Redis session TTL 过期时间 (秒)
disableTTL 禁用设置的 TTL
db         使用第几个数据库
pass       Redis数据库的密码
prefix     数据表前辍即schema, 默认为 "sess:"


感谢您的阅读,希望对您有帮助,本文版权归 #惊讶# 所有

评论 (0)