redis连接池——JedisPool和JedisCluster的介绍与使用

目录


Jedis使用方式的介绍

Redis连接池介绍

创建连接池配置文件

单机版的Redis连接池

集群版的Redis连接池

总结

 


 

 

 

Jedis使用方式的介绍

   Jedis就是Java实现的操作Redis的一套API集合,没有太多需要说明的,可以参考这篇博客,了解Jedis操作Redis相关API的用法,Java 使用Jedis操作redis

 

 

Redis连接池介绍

  Redis连接池,也可以说是Jedis连接池,因为是利用Java实现的Jedis API进行连接池的创建、使用以及释放。

  Redis不仅仅是缓存,他还是一个数据库,只不过是一个比较特别的数据库而已(NoSQL),所以Redis连接池和数据库连接池(比如Druid,C3P0,DBCP),原理上都是类似的。

  Redis连接池可以大概分为两种,单机版和集群版,从名字上就可以看出区别,下面会对两种形式的连接池进行配置和使用。

 

 

创建连接池配置文件

  创建配置文件,文件名和路径随意,我这里命名为redis_pool.properties,存放在项目的classpath目录下,内容如下:

redis_maxTotal=30
redis_maxIdle=15
redis_minIdle=5
redis_ip=127.0.0.1
redis_port=6379

  

 

单机版的Redis连接池

  单机版,是指应用中只有一台Redis服务器,所有的操作都是在这台Redis服务器上面进行,此时配置和使用Redis只需要一个host+port(就是Redis服务器的host和port)。

package cn.ganlixin.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 学习单机版的Jedis连接池的用法
 */
public class TestJedisPool {
	public static void main(String[] args) throws IOException {
		
		// 读取Redis Pool的配置文件(位于classpath目录下)
		InputStream _is = TestJedisPool.class.getClassLoader().getResourceAsStream("redis_pool.properties");
		Properties props = new Properties();
		props.load(_is);
		
		// 读取配置项
		int maxTotal = Integer.parseInt(props.getProperty("redis_maxTotal"));
		int maxIdle = Integer.parseInt(props.getProperty("redis_maxIdle"));
		int MinIdle = Integer.parseInt(props.getProperty("redis_minIdle"));
		String ip = props.getProperty("redis_ip");
		int port = Integer.parseInt(props.getProperty("redis_port"));
		
		// 设置Redis Pool相关参数
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxTotal(maxTotal);
		poolConfig.setMaxIdle(maxIdle);
		poolConfig.setMinIdle(MinIdle);
		
		// 创建Jedis连接池
		JedisPool jedisPool = new JedisPool(poolConfig, ip, port);
		
		// 从连接池中获取jedis对象
		Jedis jedis = jedisPool.getResource();
		
		// 进行操作
		jedis.set("name", "beyond");
		
		// 归还连接
		jedis.close();
		
		// 关闭连接池
		jedisPool.close();
	}
}

  

   

集群版的Redis连接池

  集群版与单机版的区别很明显,就是整个项目中,有多台Redis服务器,多台服务器以主从方式运行,并且Redis集群中Redis服务器的数量最少为6个,至于怎么搭建Redis集群,这里就不阐述了。

  虽然搭建Redis集群的操作可能有点麻烦,但是在Java中使用Jedis来配置Jedis连接池却并不是特别复杂,也就比单机版的Redis集群多配置集群中Redis服务器节点的相关信息,代码如下:

package cn.ganlixin.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

public class TestJedisCluster {
	public static void main(String[] args) throws IOException {
		
		// 创建集群的节点集合
		Set<HostAndPort> nodes = new HashSet<>();
		
		// 添加节点到集群中
		nodes.add(new HostAndPort("127.0.0.1", 6379));
		nodes.add(new HostAndPort("127.0.0.1", 6380));
		nodes.add(new HostAndPort("127.0.0.1", 6381));
		nodes.add(new HostAndPort("127.0.0.1", 6382));
		nodes.add(new HostAndPort("127.0.0.1", 6383));
		nodes.add(new HostAndPort("127.0.0.1", 6384));
		nodes.add(new HostAndPort("127.0.0.1", 6385));
		nodes.add(new HostAndPort("127.0.0.1", 6386));
		
		// 读取Redis Pool的配置文件(位于classpath目录下)
		InputStream _is = TestJedisCluster.class.getClassLoader().getResourceAsStream("redis_pool.properties");
		Properties props = new Properties();
		props.load(_is);
		
		// 读取配置项
		int maxTotal = Integer.parseInt(props.getProperty("redis_maxTotal"));
		int maxIdle = Integer.parseInt(props.getProperty("redis_maxIdle"));
		int MinIdle = Integer.parseInt(props.getProperty("redis_minIdle"));
		
		// 设置Redis Pool相关参数
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxTotal(maxTotal);
		poolConfig.setMaxIdle(maxIdle);
		poolConfig.setMinIdle(MinIdle);		
		
		// 利用上面的集群节点nodes和poolConfig,创建redis集群连接池,并获取一个redis连接
		JedisCluster jedisCluster = new JedisCluster(nodes, poolConfig);
		
		// 利用获取的jedisCluster可以进行jedis的所有操作
		System.out.println(jedisCluster.set("name", "beyond"));
		System.out.println(jedisCluster.get("age"));
		
		// 归还连接
		jedisCluster.close();
	}
}

  

 

 总结

  上面进行了单机版和集群版的Redis连接池进行了配置和使用,但是在平时的开发工作中,我们几乎不可能这么写,通常都是会和Spring进行整合,然后依靠Spring的IoC和DI,在需要redis操作的地方注入一下,就可以使用了。

  Spring整合Redis,并且搭建Redis连接池的文章可以参考:Spring整合Redis,并配置Jedis连接池

 

 

posted @ 2019-06-08 17:07 寻觅beyond 阅读(...) 评论(...) 编辑 收藏
Flag Counter