Java调用Redis集群代码及问题解决
2020-03-11 17:51
573 查看
前言
需要使用以下jar包
Maven项目引用以下配置:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.26</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.26</version> <scope>test</scope> </dependency>
代码
package Main; import java.io.IOException; import java.util.LinkedHashSet; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; @SuppressWarnings("all") public class RedisMain { public static void main(String[] args) { JedisCluster cluster =null; try { Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>(); //一般选用slaveof从IP+端口进行增删改查,不用master nodes.add(new HostAndPort("外网IP", 7003)); nodes.add(new HostAndPort("外网", 7004)); nodes.add(new HostAndPort("外网IP", 7004)); // Jedis连接池配置 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); // 最大空闲连接数, 默认8个 jedisPoolConfig.setMaxIdle(100); // 最大连接数, 默认8个 jedisPoolConfig.setMaxTotal(500); //最小空闲连接数, 默认0 jedisPoolConfig.setMinIdle(0); // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1 jedisPoolConfig.setMaxWaitMillis(2000); // 设置2秒 //对拿到的connection进行validateObject校验 jedisPoolConfig.setTestOnBorrow(true); //未设置auth Password JedisCluster jedis = new JedisCluster(nodes, jedisPoolConfig); //设置auth Password //JedisCluster jedis = new JedisCluster(nodes,5000,3000,10,{auth_password}, new JedisPoolConfig()); System.out.println(jedis.get("mykey")); }catch(Exception e) { e.printStackTrace(); }finally { if(null !=cluster) cluster.close(); } } }
可能出现的异常
1、DENIED Redis is running in protected mode because protected mode is enabled...
解决方法:redis.conf默认禁止外网访问,修改”protected-mode yes”为“protected-mode no”
2、No more cluster attempts left.
解决方法:redis设置集群时,服务器没有配置开启集群总线端口(redis端口+10000),如果redis-cli端口有7000-7005,则集群总线端口为17000-17005,服务器7000-70005、17000-17005端口都要打开
3、No reachable node in cluster
解决方法:查看redis.conf 的 "bind xxxxxxx" 是否限制了IP访问,注销bind则可以任意IP访问服务器Redis
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- jmeter 使用beanshell 调用 java 代码解决请求签名相关问题
- Java 调用 .Net Web Service 问题解决方法分享
- java.lang.Process调用程序阻塞问题解决
- 继“破解某国外收费的RTMP Client并成功在Android和Java上调用”后续问题解决办法
- JavaScript(XMLHttpRequest)跨域访问解决办法及安全性问题(附java写的proxy代码)
- Java的Applet调用第三方jar包,web调用问题解决方案
- java 实现新浪微博内容计数器 Java问题通用解决代码
- java 调用bash shell脚本阻塞的小问题的解决
- javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
- JAVA关于方法调用的代码写法与性能问题
- Java 调用 FFMPEG 命令时用 url 作为输入源,Linux 下出现 “no such file or directory” 问题的解决
- 解决.NET 调用JAVA WEBService服务中文乱码问题
- java中替换双引号 Java问题通用解决代码 Java问题通用解决代码
- 《对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们》的问题的解决方法
- 解决Java代码中使用的图片应该放到哪个目录里的问题
- 漂亮的代码,糟糕的行为——解决Java运行时的内存问题
- Java调用jacob出错问题:java.library.path解决
- 将Capicom调用代码封装到ActiveX——解决javascript调Capicom读取数字证书信息时,IE弹出安全提示的问题
- java.lang.Process调用程序阻塞问题解决
- 用Java语言解决的汉诺塔问题的代码