java - 用于 ShardedJedisPipeline 的 Redis Sentinel 和 ShardedJedis

标签 java redis jedis redis-sentinel

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

现在看来我所有的路径都关闭了

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

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

最佳答案

一般来说:

  • Redis Cluster 像 Redis Standalone 一样支持流水线。这里的重要部分是在使用键发出命令时点击正确的节点。没有键的命令(例如 MULTIEXEC)不适用于 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/

相关文章:

Redis 在 Windows7 上不作为 Windows 服务启动

java - 考虑重新访问上面的条目或在您的配置中定义类型为 'org.springframework.data.redis.core.RedisTemplate' 的 bean

压力测试下的Redis hooking(发布-订阅)——负载下的性能

java - Sonarqube:查看覆盖源代码的单元测试

java - 从卡的 toString() 获取错误的字符串

java - 使用 spring-boot 对 Rest 服务进行访问控制

java - 将Set <byte []>转换为List <String>

java - Spring & 没有独特的 bean 类型

python - Redis使用python获取数据

java - 您可以为 Redis 集群(主/从)设置一个端点吗?