网上搜了很久,发现很多 Redis高可用的方案,发现这种是最符合我的情况的。master.disconnect();用于清理链接。
希望对你有所帮助。
Java通过JedisSentinelPool连接Redis,实现插入时master的切换无影响。
import java.util.HashSet;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;
public class JRedisSentinelTest {
public static void main(String[] args) throws InterruptedException {
//服务IP
String ip = "xx.xx.xx.xx";
int TimeOut = 10000;
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(200);
config.setMaxIdle(50);
//在获取连接的时候检查有效性,
//config.setTestOnBorrow(true);
//在空闲时检查有效性, 默认false
//config.setTestWhileIdle(true);
config.setMaxWaitMillis(1000);
String masterName = "mymaster";
String password = "123456";
Set sentinels = new HashSet();
//Sentine端口
sentinels.add(new HostAndPort(ip, 26371).toString());
sentinels.add(new HostAndPort(ip, 26372).toString());
sentinels.add(new HostAndPort(ip, 26373).toString());
JedisSentinelPool sentinelPool = new JedisSentinelPool(masterName, sentinels, config, TimeOut,password);
System.out.println("Current master: " + sentinelPool.getCurrentHostMaster().toString());
for(int i=0;i<1000;i++) {
Jedis master = sentinelPool.getResource();
master.set(""+i,""+i);
System.out.println("第"+i+"次沉睡");
master.close();
master.disconnect();
Thread.sleep(5000);
}
sentinelPool.destroy();
}
}