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;
	}
	
}
相关推荐
秋名RG6 小时前
Java 基础语法
java·开发语言
程序员阿明6 小时前
spring boot4+springAI 2加redis多轮对话存储
spring boot·redis·后端
java1234_小锋6 小时前
MyBatis-Plus 3.5.15 已全面支持 Spring Boot 4.0 及 Jackson 3.0
java·spring boot·mybatis
2501_937860946 小时前
Java 文件操作与IO(下):字节流、字符流实战IO读写
java·开发语言·python
xixingzhe26 小时前
spring boot项目接口访问慢问题解决方案
java·数据库·spring boot
MetaLite6 小时前
SpringBoot整合FastJson2数据脱敏-接口日志与失败降级
java·spring boot·后端
bjzhang756 小时前
使用HTML+CSS美化上传进度条展示
前端·css·html
何以解忧,唯有..6 小时前
Vue 3 响应式核心:ref() 与 reactive() 的深入解析与实战
前端·javascript·vue.js
驭渊的小故事6 小时前
java抽奖项目-奖品上传中传递参数类型的错误
java·开发语言
晴天166 小时前
Chrome DevTools Protocol(CDP)分享-Day36
前端·chrome·chrome devtools