总览
redis的哨兵模式,不做过多解释,可以网上自行搜索,仅仅说明一些和本缺陷有关的内容吧:哨兵是负责放哨的,它本身不负责操作数据,并且redis本身的节点都是也是主从,每一个节点都会一个哨兵,它们的端口号不同。客户端在连接的时候,配置的是哨兵的地址,连接有两个过程:
- 连接哨兵,验证密码,然后通过主节点名称去咨询主节点的IP和端口。
- 客户端拿到主节点地址后,然后再去真正的操作数据。
这次就只强调这两个过程吧,因为vertx的缺陷和这个有关系。目前还没有调研最新的版本有没有解决这个问题,就当记录一个疑难问题的分析和解决过程了。
问题描述
从配置上支持了哨兵,vertx那边也提供了一些API吧,在redisOptions里面,如下:
RedisOptions options = new RedisOptions();
String masterNames = info.getMasterNames();
if (masterNames != null && masterNames.trim().length() != 0) {
options.setMasterName(masterNames);
}
String nodesStr = info.getNodes();
String[] nodesArray = nodesStr.split(",");
List<String> nodes = Arrays.asList(nodesArray);
if (nodes != null && nodes.size() >