我们希望我们的Redis更具有可伸缩性,并且希望能够添加更多的read实例。
我正在尝试使用这个新的阅读器端点:https://aws.amazon.com/about-aws/whats-new/2019/06/amazon-elasticache-launches-reader-endpoint-for-redis
但是,对于ioredis来说,我看不到任何简单或自动的方法来使用这种方法,在这种方法中,我可以设置哪个端点用于写,哪个端点用于读取。即使在这里,我也可以看到最后推荐的方法是“手动拆分”:https://github.com/luin/ioredis/issues/387
您知道现有的解决方案或好的方法吗?我可以设置哪些端点用于写入,哪些端点将用于读取?
现在对我来说最直接的是某种“代理”层,在这里我将创建Redis的两个实例,并将所有的写入发送到主端点,并将所有的读发送到Reader端点。然而,我更喜欢一些更好(或测试良好)的方法。
PS:我试图用Cluster的ioredis功能“黑”它,但是即使没有任何功能和一个主端点的简单连接也不能用ClusterAllFailedError: Failed to refresh slots cache. (启用读取器端点--必须关闭群集模式)。
发布于 2021-01-08 16:56:07
请注意它是如何结束的。
我们有两个实例(如果URL相同,则重用相同的实例)
redis = new Redis(RKT_REDIS_URL.href, redisOptions)
if (RKT_REDIS_READER_URL.href === RKT_REDIS_URL.href) {
redisro = redis
} else {
redisro = new Redis(RKT_REDIS_READER_URL.href, redisOptions)
}然后先用于写入,其他用于读取。
redis.hmset(key, update)
redisro.hmget(key, field)然而,经过一段时间后,我们已经采用了集群红色,它是更好的,可以推荐。而且,ioredis npm模块能够无拘无束地使用它(您不需要配置任何东西,只需将配置端点放在那里,即AWS提供的端点,就这样)。
这是我们的配置
redisOptions.scaleReads = 'master'
redis = new Redis.Cluster([RKT_REDIS_URL.href], redisOptions)scaleReads的选项包括
默认情况下,
scaleReads是“主”,这意味着ioredis永远不会向奴隶发送任何查询。还有其他三个可供选择的方案:
“所有”:随机向主程序发送写查询,向主程序或从主发送读取查询。“从”:向主发送写查询,向奴隶发送读查询。
https://stackoverflow.com/questions/60095059
复制相似问题