java连接redis,兼容主从切换
使用redis的主从集群
兼容情况:当redis的主从,通过网络问题或者机器异常问题发生了主从切换,程序能自动识别到主从变更,进而连master进行写操作
做到无感知
在使用Java连接到Redis主从集群时,确保应用程序能够在发生主从切换时自动感知并更新连接至新的主节点是非常重要的。这通常涉及到使用一些高级的客户端库,如Jedis、Lettuce或Redisson,这些库提供了对Redis Sentinel或Cluster模式的支持,能够处理故障转移和重新路由到新的主节点。
Redis Sentinel
Redis Sentinel提供了高可用性解决方案,通过监控主从节点和执行自动故障转移。如果你的Redis设置使用的是Sentinel来管理主从切换,你应该配置你的Java客户端来连接到Sentinel,让Sentinel告诉客户端当前哪个是主节点。
使用Jedis与Sentinel
对于Jedis客户端,可以这样配置连接到Sentinel管理的Redis环境:
Set<String> sentinels = new HashSet<String>();
sentinels.add("host1:26379");
sentinels.add("host2:26379");
sentinels.add("host3:26379");
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
try (Jedis jedis = pool.getResource()) {
// 执行操作
}
在这个例子中,mymaster是你在Sentinel配置中指定的主节点名称。客户端会自动查询Sentinel以发现当前的主节点,并在主从切换时自动更新连接。
sentinel配置文件
其中sentinel monitor mymaster 172.31.224.215 6379 2 ,中定义了redis的主id是mymaster
daemonize yes
port 6666
sentinel monitor mymaster 172.31.224.215 6379 2
dir "/export/servers/sentinel/conf"
logfile "/export/Logs/sentinel/sentinel.log"
sentinel down-after-milliseconds mymaster 10000
sentinel auth-pass mymaster 123456
sentinel config-epoch mymaster 33
sentinel leader-epoch mymaster 33
sentinel known-slave mymaster 172.31.238.236 6379
sentinel known-sentinel mymaster 172.31.224.216 6666 6d6bd165e7f38cd7cc13df5cb1410cbc000cc87e
sentinel known-sentinel mymaster 172.31.239.149 6666 88b1bb5378ef9f8362aafb866f3a7c1e3d477214
# Generated by CONFIG REWRITE
sentinel known-sentinel mymaster 172.31.239.148 6666 0dd4d17700cdccf814934dd34d7a08f40bd3ba5b
sentinel known-sentinel mymaster 11.17.161.90 6666 060c5de67a7802f6e3d8323e94d29ad320780fd7
sentinel known-sentinel mymaster 11.17.161.91 6666 de367b4775499ca9861036f4291e26ad4a2f14a3
sentinel known-sentinel mymaster 172.31.224.215 6666 9a1b6e0d23b3bf30ba35224974f32a7c009da692
原创:做时间的朋友