我最初在生产环境中以集群模式使用 Redis
。但后来我意识到,如果我使用 ShardedJedis java API
使用 Redis 独立服务器
,我可以使用 ShardedJedisPipeline
,由于显而易见的原因,它具有更好的性能。
但是在使用 Redis Server
来维护自动故障转移和高可用性时,我必须使用 Redis Sentinel
。因此,我开始研究 Sentinel
。但是在进行初始 POC
时,我了解到我不能同时使用 ShardedJedis
和 Sentinel
。
现在看来我所有的路径都关闭了
Redis Cluster
不支持Pipeline- 如果没有
Sentinel
,我无法实现高可用性和自动故障转移 - 我不能将
Sentinel
与ShardedJedis
一起使用。
如果我有任何错误,请纠正我,请建议我实现性能以及高可用性和自动故障转移的最佳策略。
最佳答案
一般来说:
- Redis Cluster 像 Redis Standalone 一样支持流水线。这里的重要部分是在使用键发出命令时点击正确的节点。没有键的命令(例如
MULTI
或EXEC
)不适用于 Redis 集群 - HA 部分并非 100% 正确。虽然 Redis 集群确实没有像 Redis Sentinel 那样的 HA-Registry,但集群本身维护着一个拓扑结构。如果使用 masters 和 slaves,那么将客户端故障转移到新的 master 并不是什么大问题。这里唯一的技巧是找到合适的时机并相应地更新集群 View 。
据我所知,Redisson具有自动拓扑更新机制。我不确定 Jedis 是否定期更新它的集群 View ,但可以手动执行此操作。 lettuce具有自动重新连接功能,自动集群 View 更新为 scheduled for the 3.3 release
HTH.
关于java - 用于 ShardedJedisPipeline 的 Redis Sentinel 和 ShardedJedis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406389/