一、java工程连接redis数据库:

本文不再赘述

二、redis连接池

1、为什么使用redis连接池?

         首先Redis也是一种数据库,它基于C/S模式,因此如果需要使用必须建立连接,稍微熟悉网络的人应该都清楚地知道为什么需要建立连接,C/S模式本身就是一种远程通信的交互模式,因此Redis服务器可以单独作为一个数据库服务器来独立存在。假设Redis服务器与客户端分处在异地,虽然基于内存的Redis数据库有着超高的性能,但是底层的网络通信却占用了一次数据请求的大量时间,因为每次数据交互都需要先建立连接,假设一次数据交互总共用时30ms,超高性能的Redis数据库处理数据所花的时间可能不到1ms,也即是说前期的连接占用了29ms,连接池则可以实现在客户端建立多个链接并且不释放,当需要使用连接的时候通过一定的算法获取已经建立的连接,使用完了以后则还给连接池,这就免去了数据库连接所占用的时间。

       针对同“一个”数据库可以建立多个连接,Jedis从JedisPool中获取的仅仅是一个连接,至于多个连接到达单进程单线程的Redis之后怎么处理则是另外一回事(采用多路IO复用)。

 

2、如何建立连接池?

    我们在项目中可能会有多个地方需要操作redis数据库,如果每操作一次redis数据库就写一次创建连接池,获取资源的代码,那代码的复用性和可读性就太低了,所以,大多数情况下,我们把获取资源的操作写在工具类中。

代码如下,供读者参考:

1)新建properties文件,将redis连接池的配置属性写在配置文件中

redis.maxIdle=  8   // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 最大闲置个数
redis.minIdle= 3  // 最小闲置个数
redis.maxTotal= 100   // 最大连接数
redis.url= 192.168.137.3  // redis IP地址  
redis.port = 6379  // 端口号

2)新建工具类

public class JedisPoolUtils {
	
	private static JedisPool pool = null;
	
	static{
		
		//加载配置文件
		InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
		Properties pro = new Properties();
		try {
			pro.load(in); 
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//获得连接池对象
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数
		poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数
		poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大连接数
		pool = new JedisPool(poolConfig,pro.getProperty("redis.url") , Integer.parseInt(pro.get("redis.port").toString()));
	}

	//获得jedis资源的方法
	public static Jedis getJedis(){
		return pool.getResource();
	}
	
	public static void main(String[] args) {
		Jedis jedis = getJedis();
		System.out.println(jedis.get("xxx"));
	}
	
}

除此之外,我们还可以配置redis的过期时间,等待可用连接的最大时间等。


三、总结

redis是一种NoSQL数据库,和其他数据库相似,建立连接池可以使资源重用,更快响应系统,建立统一的连接管理,避免数据库连接泄露。