前言
使用Jedis对Redis进行单节点和集群的连接实操案例。
导入依赖
jedis用到的依赖(new Jedis(ip,port),用于jedis示例)
redis.clients jedis 2.9.0
拓展学习(获取配置文件参数)
因为是Jedis所以直接在代码中配置或者说是可以从文件中读取配置参数信息来进行配置。那么如果要读取cfg文件的参数配置的话,需要引入ini4j的依赖,如下:
读取cfg文件参数
org.ini4jini4j0.5.4
单节点信息操作
private void singleRedis() { Jedis jedis = new Jedis(host, port); jedis.auth(password); // 如果redis是集群模式会报错:JedisMovedDataException , 需要采用jedisCluster来进行连接 jedis.set("first", "Hello single Jedis, finish study-work of Redis in one day"); System.err.println(jedis.get("first")); }
集群节点操作
Jedis连接Redis集群需要采用JedisCluster才行,如果单独依照上面单节点进行密码验证的话会报错:
Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
那么我们构建JedisCluster对象的时候查看源码会发现有两个带密码的构造方法:
JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout,int maxAttempts, String password, final GenericObjectPoolConfig poolConfig)
JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, int maxAttempts, String password, final GenericObjectPoolConfig poolConfig)
其实两个没什么差距,只是集群单节点和多节点的差别。
GenericObjectPoolConfig构造
private GenericObjectPoolConfig getGenericObjectPoolConfig() { GenericObjectPoolConfig genericObjectPool = new GenericObjectPoolConfig(); genericObjectPool.setMaxIdle(10);genericObjectPool.setMaxTotal(100); genericObjectPool.setMinEvictableIdleTimeMillis(30000); // 逐出连接的最小空闲时间 30s genericObjectPool.setSoftMinEvictableIdleTimeMillis(60000); // 空闲逐出时间1分钟 return genericObjectPool;}
集群实例
private void clusterRedis() { HostAndPort hostAndPort = new HostAndPort(host, port); Set hostAndPortSet = new HashSet<>(); hostAndPortSet.add(hostAndPort); //10是maxAttempts , 第一个参数可以为hostAndPort或者Set JedisCluster jedisCluster = new JedisCluster(hostAndPort, REDIS_COMMAND_TIMEOUT, REDIS_COMMAND_TIMEOUT, 10, password, this.getGenericObjectPoolConfig()); jedisCluster.set("second", "Hello cluster Jedis, finish study-work of Redis in one day"); System.err.println(jedisCluster.get("second"));}private GenericObjectPoolConfig getGenericObjectPoolConfig() { GenericObjectPoolConfig genericObjectPool = new GenericObjectPoolConfig(); genericObjectPool.setMaxIdle(10);genericObjectPool.setMaxTotal(100); genericObjectPool.setMinEvictableIdleTimeMillis(30000); // 逐出连接的最小空闲时间 30s genericObjectPool.setSoftMinEvictableIdleTimeMillis(60000); // 空闲逐出时间1分钟 return genericObjectPool;}public static void main(String[] args) { JedisDemo jedisDemo = new JedisDemo(); //jedisDemo.singleRedis(); jedisDemo.clusterRedis();}