1、配置
1.1、配置图解
2、验证
2.1、程序启动
主从模式
集群模式
2.2、测试
2.3、stop-master
2.4、stop-master-again
2.5、数据同步
3、其它事项
3.1、down-after-milliseconds
#master或slave多长时间(默认30秒)不能使用后标记为s_down状态。 sentinel down-after-milliseconds mymaster 3000 (可改为3秒)
redis哨兵sentinel.config中配置,程序无法处理
3.2、failover-timeout mymaster
#若哨兵在配置值内未能完成故障转移操作(默认180000),则任务本次故障转移失败
sentinel failover-timeout mymaster 18000
redis哨兵 sentinel.config中配置,程序无法处理
4、测试controller
@GetMapping(path = "/redisTest", produces = MediaType.APPLICATION_JSON_VALUE)
public String redisTest() {
log.info("redisTest - start ");
// 1> 参数验证
try {
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String aa = df.format(date);
String key = "key:" + aa;
redisClient.set("key:" + aa, aa, 100, TimeUnit.SECONDS);
System.err.println("set success");
String test = redisClient.get(key);
System.err.println("get -> " + test);
}catch (NullPointerException | IllegalArgumentException e) {
log.error("error : {} . ", e);
return e.getMessage();
}catch (Exception e) {
log.error("error : {} . ", e);
return e.getMessage();
}
log.info("redisTest - end ");
log.info("lock - check - start . ");
try {
RLock lock = redisClient.getLock("test-lock");
try {
lock.lock();
System.err.println("redisLock执行中");
new Thread(new Runnable() {
@Override
public void run() {
RLock lock = redisClient.getLock("test-lock");
try {
lock.lock();
System.err.println("redisLock2执行中.......");
} finally {
if (lock != null) {
lock.unlock();
}
System.err.println("redisLock2执行结束");
}
}
}).start();
Thread.sleep(1000 * 5);
} finally {
if (lock != null) {
lock.unlock();
}
System.err.println("redisLock执行结束");
}
Thread.sleep(1000 * 3);
log.info("lock - check - end . ");
return "lock";
}catch (NullPointerException | IllegalArgumentException e) {
log.error("error : {} . ", e);
return e.getMessage();
}catch (Exception e) {
log.error("error : {} . ", e);
return e.getMessage();
}
}