AWS Redis Reader 端点和 ioredis
AWS Redis Reader endpoint and ioredis
我们希望我们的 Redis 更具可扩展性,我们希望能够添加更多读取实例。
我正在尝试使用这个新的 Reader 端点:https://aws.amazon.com/about-aws/whats-new/2019/06/amazon-elasticache-launches-reader-endpoint-for-redis
但是,我没有看到 ioredis
有任何简单或自动化的方法来使用该方法,我可以在其中设置哪个端点用于写入,哪个端点用于读取。即使在这里我也可以看到最后推荐的方法是 "manually split": https://github.com/luin/ioredis/issues/387
您是否知道任何现有的解决方案或好的方法,我可以设置哪些端点将用于写入,哪些端点将用于读取?
现在对我来说最直接的是某种 "proxy" 层,我将在其中创建两个 Redis 实例,并将所有写入发送到主要端点,所有读取发送到 Reader端点。但是我更喜欢一些更好的(或经过良好测试的)方法。
PS:我尝试 "hack it" 具有 ioredis
的 Cluster
功能,但即使是没有任何功能的简单连接和一个 - 主要端点 - 也因 ClusterAllFailedError: Failed to refresh slots cache.
(要启用 Reader 端点 - 集群模式必须关闭)
请注意它是如何结束的
我们有两个实例(如果 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,它好多了,可以推荐它。 ioredis
npm 模块也能够无缝地使用它(您不必配置任何东西,您只需将配置端点放在那里,即 AWS 提供的,仅此而已)。
这是我们的配置
redisOptions.scaleReads = 'master'
redis = new Redis.Cluster([RKT_REDIS_URL.href], redisOptions)
scaleReads 的选项是
scaleReads is "master" by default, which means ioredis will never send
any queries to slaves. There are other three available options:
"all": Send write queries to masters and read queries to masters or
slaves randomly. "slave": Send write queries to masters and read
queries to slaves.
我们希望我们的 Redis 更具可扩展性,我们希望能够添加更多读取实例。
我正在尝试使用这个新的 Reader 端点:https://aws.amazon.com/about-aws/whats-new/2019/06/amazon-elasticache-launches-reader-endpoint-for-redis
但是,我没有看到 ioredis
有任何简单或自动化的方法来使用该方法,我可以在其中设置哪个端点用于写入,哪个端点用于读取。即使在这里我也可以看到最后推荐的方法是 "manually split": https://github.com/luin/ioredis/issues/387
您是否知道任何现有的解决方案或好的方法,我可以设置哪些端点将用于写入,哪些端点将用于读取?
现在对我来说最直接的是某种 "proxy" 层,我将在其中创建两个 Redis 实例,并将所有写入发送到主要端点,所有读取发送到 Reader端点。但是我更喜欢一些更好的(或经过良好测试的)方法。
PS:我尝试 "hack it" 具有 ioredis
的 Cluster
功能,但即使是没有任何功能的简单连接和一个 - 主要端点 - 也因 ClusterAllFailedError: Failed to refresh slots cache.
(要启用 Reader 端点 - 集群模式必须关闭)
请注意它是如何结束的
我们有两个实例(如果 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,它好多了,可以推荐它。 ioredis
npm 模块也能够无缝地使用它(您不必配置任何东西,您只需将配置端点放在那里,即 AWS 提供的,仅此而已)。
这是我们的配置
redisOptions.scaleReads = 'master'
redis = new Redis.Cluster([RKT_REDIS_URL.href], redisOptions)
scaleReads 的选项是
scaleReads is "master" by default, which means ioredis will never send any queries to slaves. There are other three available options:
"all": Send write queries to masters and read queries to masters or slaves randomly. "slave": Send write queries to masters and read queries to slaves.