Redis实现主从选举

背景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;
	}
	
}
相关推荐
我命由我123453 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
晚染烟4 小时前
每日八股day17
redis
Hopebearer_4 小时前
页面突然只剩 DOM?一次静态资源版本错配排查
前端·部署
东风破_4 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
嘻哈∠※5 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
白狐_7986 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
圣殿骑士-Khtangc6 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
zander2586 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅6 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
BigTopOne7 小时前
【ijkplayer】 硬解码流程
前端