Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;不能';“无法获得插槽分配”;AWS ElastiCach(Redis)使用Node.js时出错_Node.js_Redis_Amazon Elasticache_Redis Cluster - Fatal编程技术网

&引用;不能';“无法获得插槽分配”;AWS ElastiCach(Redis)使用Node.js时出错

&引用;不能';“无法获得插槽分配”;AWS ElastiCach(Redis)使用Node.js时出错,node.js,redis,amazon-elasticache,redis-cluster,Node.js,Redis,Amazon Elasticache,Redis Cluster,我能够使用Node.js库连接到Amazon ElastiCache(Redis),这些库是Redis和Redis clustr,没有任何错误。但是,每当我试图在Amazon EC2实例上运行的Node.js应用程序中设置键和值对时,get无法获取插槽分配错误。我的Amazon ElastiCache有一个主节点和一个副本(即两个节点) 这是用于连接的代码示例: const redis_cluster = require('redis-clustr'); const redis_client =

我能够使用Node.js库连接到Amazon ElastiCache(Redis),这些库是
Redis
Redis clustr
,没有任何错误。但是,每当我试图在Amazon EC2实例上运行的Node.js应用程序中设置键和值对时,get
无法获取插槽分配
错误。我的Amazon ElastiCache有一个主节点和一个副本(即两个节点)

这是用于连接的代码示例:

const redis_cluster = require('redis-clustr');
const redis_client = require('redis');

let redis = new redis_cluster({
    servers: [
        {
             host: global.gConfig.redis.redis_host,
             port: global.gConfig.redis.redis_port
        }
    ],
    createClient: (port, host) => {
        return redis_client.createClient(port, host);
    }
});

// connection error
redis.on('error', err => {
    // log the error to log file
    global.gLogger.log('error', err.message, {stack: err.stack});
});

// add to global variables
global.gRedisClient = redis;
在我与Amazon ElastiCach建立连接后,下面的代码示例是我如何从Redis检索值的:

gRedisClient.mget(['run:123', 'walk:123'], (err, replies) => {...});
我使用Redis
multi()
进行bach操作,并使用
mget()
立即检索值。 我刚开始使用Amazon ElastiCach,如有任何帮助,将不胜感激。谢谢。

我也有同样的经历。 我的理由是我的ElastiCache被配置为主从,因此不需要redis clustr。 使用ioredis等连接到it:

const Redis=require('ioredis');
常量选项={
主持人:“你的主持人”,
港口:6379,
自动再订阅:对,
maxRetriesPerRequest:5
};
const redis=新的redis(opts);

只需先使用try
ping()
或其他命令,直到
redis clustr
返回正确答案

如果服务器正在使用tls,但未在客户端中配置,则可能引发无法获取插槽分配的错误
。您可以使用
redisOptions
启用它:

let redis = new redis_cluster({
    servers: [
        {
             host: global.gConfig.redis.redis_host,
             port: global.gConfig.redis.redis_port
        }
    ],
    redisOptions: {
        tls: {} // an empty object is enough to enable it with defaults
    },
    createClient: (port, host) => {
        return redis_client.createClient(port, host);
    }
});

谢谢你的贡献。我的配置实际上是使用一个节点,而不是两个。我已经纠正了这个错误。