用于 ShardedJedisPipeline 的 Redis Sentinel 和 ShardedJedis

Redis Sentinel and ShardedJedis for ShardedJedisPipeline

我最初在生产环境中使用 Redis 集群模式。但后来我意识到,如果我使用 Redis independent servers 使用 ShardedJedis java API,我可以使用 ShardedJedisPipeline,由于显而易见的原因,它具有更好的性能。 但是在使用 Redis Server 来维护自动故障转移和高可用性时,我必须使用 Redis Sentinel。所以,我开始研究 Sentinel。但是在做最初的 POC 时,我知道我不能同时使用 ShardedJedisSentinel

现在好像我所有的路径都关闭了

  1. Redis Cluster不支持管道
  2. 没有Sentinel
  3. 我无法实现高可用性和自动故障转移
  4. 我无法将 SentinelShardedJedis 一起使用。

如果我有任何错误,请纠正我,请给我建议实现性能以及高可用性和自动故障转移的最佳策略。

笼统地说:

  • Redis Cluster 像 Redis Standalone 一样支持流水线。这里的重要部分是在使用键发出命令时点击正确的节点。没有键的命令(例如 MULTIEXEC)对于 Redis Cluster
  • 是不行的
  • HA 部分并非 100% 正确。虽然 Redis 集群确实没有像 Redis Sentinel 那样的 HA-Registry,但集群本身维护着一个拓扑结构。如果使用 masters 和 slaves,那么将客户端故障转移到新的 master 并不是什么大问题。这里唯一的技巧是找到合适的时机并相应地更新集群视图。

据我所知,Redisson has an automated topology-update mechanism. I'm not sure, whether Jedis updates it's cluster view on a regular basis, but it's possible to do this manually. lettuce has a auto-reconnect feature and the automated cluster view update is scheduled for the 3.3 release

HTH.

您应该考虑 Redis Cluster 的行为(Redis Cluster 可以在任何操作中响应触发重定向)。

Redis Cluster的每个进程都像普通的Redis进程一样,所以支持Pipelining。 但是,它并不能保证我们使用多节点流水线是安全的。

这是一个很长的讨论,所以我附上 link 我被发布到 Redis Google Groups 关于 Redis Cluster with Pipeline。 详情请参考这里。

Redis Cluster with Pipeline