环境:window的java服务,虚拟机centos7的redis集群,在window上启动服务连接redis集群
redisson版本为3.7.1 redis7.0
一、配置没问题,包括主从和sentinel
问题:无法连接到redis(can not connect to rediss://ip:2369.....关键行会标志在Redisson.create(config)方法,大概这样子,是否跟我一样的问题自己判断吧)
(1)window再装了个redis,然后 在window系统的redis文件执行cmd “redis-cli.exe -h redis集群其中一个的ip -p 26379 info” 发现跟linux执行一样,正常
(2)java写一个执行cmd命令的,直接上代码,dddd
public class Test {
public static void main(String [] args){
String a =redis文件目录\\redis-cli.exe -h linux的redis的ip -p 26379 info";
Test test =new Test();
test.execCmdOrder(a);
}
public String execCmdOrder(String cmdCommand) {
if (StringUtils.isEmpty(cmdCommand)){
throw new RuntimeException("需要执行的命令不可以为空");
}
/*if (***其他判断条件***){
throw new RuntimeException("不满足判断条件的原因");
}*/
//组装cmd 命令
String cmd= cmdCommand ;
BufferedReader br=null;
Process process=null;
//执行命令结果
StringBuilder result =null;
try {
//执行cmd命令
process=Runtime.getRuntime().exec(cmd);
//获取cmd命令的输出结果
br=new BufferedReader(new InputStreamReader(process.getInputStream()));
result=new StringBuilder();
String tmp;
//组装命令执行结束后返回值
while ((tmp=br.readLine())!=null){
result.append(tmp).append("\n");
}
process.waitFor();
} catch (IOException |InterruptedException e) {
e.printStackTrace();
}finally {
if (br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (process !=null) {
process.destroy();
}
System.out.println("执行命令结束以后控制台返回结果为 :" +result);
}
return result.toString();
}
}
上面大部分代码是百度的,自己改命令就行了。
于是结果就是跟(1)的结果一样是正常,于是看代码,点进去关键方法,
在这里debug看到了是因为ssl的问题。。我透
于是
把这的rediss改为redis就好了
于是继续。。。。。
下一个问题出现了
它会提示commond slaves不合法什么的,确实没有slaves了啊我redis都7.0了,急了,上git看看版本,发现3.7.1有个文件是4年前的,不太懂这个能不能证明它的年龄,但是马上改成最新的3.8.0了。
启动!失败!还是一样的错误,再细看错误日志
关键字句在 Set checkSentinelsList = false to avoid this check这个上面,于是
就行了,解决!
测试,通过,暂无发现什么问题
要问解决的原理,真不懂,百度也没找到几个是详细说redisson的,不知道是不是我找的姿势不对
用redisson其实也是为了它实现的锁
我只是以粗暴的方式解决了这个,希望能给大家带来有用的地方