sentinel客户端支持——jedis
简单的代码:
public class App
{
public static void main( String[] args )
{
Set<String> sentinels = new HashSet<String>();
// 添加sentinel
sentinels.add("172.18.18.207:26379");
// 初始化基于sentinel的连接池,需要一个master的名字(用于查询这个master)
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
// 后面使用和标准的jedis连接池相同
Jedis jedis = pool.getResource();
jedis.set("jedis", "jedis");
pool.returnResource(jedis);
}
}
JedisSentinelPool的源码在github上托管。
大致的流程:
1. 根据给定的sentinel列表和master名字,获得master信息(IP,端口)(通过sentinel master命令)
2. 启动一个线程,根据给定的sentinel列表,订阅+switch-master消息
3. 一旦发现有master切换,调用initPool方法,修改连接池使用的master