背景Spring Boot 结合 JedisCluster
主从选举
主未掉线则一直是主,直到主掉线才切换主节点
java
/**
* 采用Redis实现主从
*/
@Component
public class RedisServiceMaster {
private static final String OK = "OK";
private static final String MASTER_KEY = "master.key";
private static final String ID = UUID.randomUUID().toString();
//过期时间15秒
private static final int EXPIRE_TIME = 15;
@Autowired
private JedisCluster jedisCluster;
private boolean isMaster = false;
/**
* 选取主节点
*/
private void electionMaster() {
try{
String res = jedisCluster.setnx(MASTER_KEY,ID,SetParams.setParams().nx().ex(EXPIRE_TIME));
isMaster = OK.equalsIgnoreCase(res);
} catch (Exeception e) {
isMaster = false;
}
}
/**
* 每隔5秒检测一次,如果发现不是主节点,则重新选举新的主节点
*/
@Scheduled(fixedRate = 5000)
private void checkMaster(){
if(isMaster){
jedisCluster.exipre(MASTER_KEY, EXPIRE_TIME);
} else {
electionMaster();
}
}
public boolean isMaster() {
return isMaster;
}
}