当前位置: 首页 > 知识库问答 >
问题:

在Connect-redis和ioredis上的AWS配置上的Redis集群

苗阳文
2023-03-14

我在AWS(ElastiCache)上配置了Redis集群。

它有一个配置endpoint和6个节点(3个碎片)。

在这里阅读npm模块的文档时,它说您必须合并ioredis才能使其用于Redis集群。

我共享了以下配置,该配置适用于单个Redis节点,但不适用于集群

"use strict";

// Include modules
var express = require("express"),
    cookieParser = require("cookie-parser"),
    bodyParser = require("body-parser"),
    session = require("express-session"),
    RedisStore = require("connect-redis")(session),
    middleware = require("./routes/middleware"),

    app = express(),
    sessionNameOfApp = createAppSpecificSession(configNameOfApp),

//This works but only for a single node. It doesn't work for a Redis Cluster
function createAppSpecificSession(config) {
    return session({
        store: new RedisStore({
            host: config.SESSION.host,
            port: config.SESSION.port,
            pass: config.SESSION.pass
        }),
        resave: false,
        saveUninitialized: false,
        secret: config.SESSION.cookieSecret,
        name: config.SESSION.cookieName,
        genid: sessionMethods.generateSessionId
    });
}

app.use(middleware.setUUIDOnReq);
app.use(middleware.setAgentOnReq);

// additional app modules
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(cookieParser());

app.use(middleware.setSessionMethods);

// Include routes
require("./routes/app")(express, app);

module.exports = app;

我的问题是-如何合并ioredis来支持集群?

这对我来说是一个巨大的障碍,所以任何帮助都将受到高度赞赏。

全网找例子,一无所获!

共有1个答案

锺离伟彦
2023-03-14

这就是最终对我起作用的原因:

app.js文件:

"use strict";

// Include modules
var express = require("express"),
    path = require("path"),
    cookieParser = require("cookie-parser"),
    bodyParser = require("body-parser"),
    session = require("express-session"),
    RedisStore = require("connect-redis")(session),
    Redis = require('ioredis'),
    config = require("./config"),
    errorMessage = require("./errors/errorMessage"),
    sessionMethods = require("./utils/sessionMethods"),
    helmet = require("helmet"),
    middleware = require("./routes/middleware"),
    app = express(),
    session = createAppSpecificSession(config),

function createAppSpecificSession(config) {

    var redis = null;
    redis = new Redis({
        host: config.SESSION.host,
        port: config.SESSION.port,
        password: config.SESSION.password
    });

    return session({
        store: new RedisStore({
            client: redis
        }),
        resave: false,
        saveUninitialized: false,
        secret: config.SESSION.cookieSecret,
        name: config.SESSION.cookieName,
        genid: sessionMethods.generateSessionId
    });
}

app.use(helmet());
app.use(middleware.setUUIDOnReq);
app.use(middleware.setAgentOnReq);

// additional app modules
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(cookieParser());

app.use("/", session);

// Include routes
require("./routes/app")(express, app);

module.exports = app;

和配置文件:

配置。js公司

module.exports = {
    SESSION: {
        hosts: [{
            host: "endpoint1.0001.apse1.cache.amazonaws.com",
            port: 6379,
            password: "",
        }, {
            host: "endpoint2.0002.apse1.cache.amazonaws.com",
            port: 6379,
            password: "",
        }, {
            host: "endpoint3.0003.apse1.cache.amazonaws.com",
            port: 6379,
            password: "",
        }],
        cookieName: "connect.sid",
        cookieSecret: ["blablabla", "blablabla"]
    }
};
 类似资料:
  • 我们希望我们的Redis更具可扩展性,并且能够添加更多的读取实例。 我正在尝试使用此新的读卡器endpoint:https://aws.amazon.com/about-aws/whats-new/2019/06/amazon-elasticache-launches-reader-endpoint-for-redis 但是,我没有看到使用这种方法的任何简单或自动的方法,我可以设置哪个endpoi

  • 问题内容: 如何在AWS ElasticBeanstalk上安装和配置Redis?有人知道如何编写.ebextension脚本来实现这一目标吗? 问题答案: AWS Elastic Beanstalk确实通过.ebextensions文件夹提供了资源配置。本质上,除了应用程序之外,您还需要告诉Elastic Beanstalk您还希望提供什么。用于置备到默认vpc。你需要 创建一个.ebexten

  • 有一个问题,通过遵循回购 https://github.com/razorinc/redis-openshift-example 当我启动redis server时,它显示“[12010]25 Mar 20:14:53#打开端口6379:bind:权限被拒绝” 我试图将端口0更改为端口3128,但仍然得到相同的错误。。。。不知道为什么 --更新当我尝试升级到redis 2.6并使用--port参数

  • 问题内容: 在Webfaction共享主机帐户上设置Redis数据库需要执行哪些步骤? 问题答案: 由于Webfaction服务器的特殊环境限制,安装说明并不像它们那样简单。不过,最后您将拥有一个功能齐全的Redis服务器,即使重新启动后它也可以保持运行状态。大约半年前,我通过以下步骤亲自安装了Redis,此后一直运行良好。只是警告一下,半年不是很长的时间,尤其是因为服务器没有被大量使用。 这些说

  • 本文向大家介绍如何在Ubuntu Linux上配置和安装Redis,包括了如何在Ubuntu Linux上配置和安装Redis的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将学习如何配置Redis,Redis是一种内存中键值存储,它以其灵活性,性能和广泛的语言支持而广受欢迎。我们将在Ubuntu Linux服务器上进行配置。要进行此演示,我们需要一个非root用户,并将为该用户设置Sud

  • 问题内容: 注意对于那些使用Redis挣扎的人,必须启动Redis服务器。 在Windows上,有一个redis发行版,请查看以下链接:https : //github.com/dmajkic/redis/downloads,然后通过启动“ redis-server.exe”来启动服务器。 我正在遵循有关node.js的教程。本教程使用Express和Redis。我安装了redis和connect