AWS Redis Reader 终端节点和 ioredis



我们希望我们的 Redis 更具可扩展性,并且希望能够添加更多的读取实例。

我正在尝试使用这个新的读取器端点: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 实例,并将所有写入发送到主终结点,将所有读取发送到读取器终结点。但是,我更喜欢一些更好(或经过良好测试(的方法。

PS:我试图用ioredis的功能"破解它"Cluster但即使是没有任何功能的简单连接和一个 - 主端品 - 也失败了ClusterAllFailedError: Failed to refresh slots cache.(若要启用读取器终结点 - 群集模式必须关闭(

只需注意它是如何结束的

我们有两个实例(如果 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)

但是一段时间后,我们采用了集群 redis,它要好得多,可以推荐它。此外,ioredisnpm 模块能够无缝地使用它(您不必配置任何东西,您只需在那里放置配置终端节点,即 AWS 提供,仅此而已(。

这是我们的配置

redisOptions.scaleReads = 'master'
redis = new Redis.Cluster([RKT_REDIS_URL.href], redisOptions)

scaleReads 的选项是

scaleReads默认是"master",这意味着ioredis永远不会发送 对奴隶的任何查询。还有其他三个可用选项:

"all":将写入查询发送到主服务器,将读取查询发送到主节点或 奴隶随机。"slave":向主服务器发送写入查询并读取 查询从属。

https://github.com/luin/ioredis

相关内容

  • 没有找到相关文章

最新更新