一、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数据库,和其他数据库相似,建立连接池可以使资源重用,更快响应系统,建立统一的连接管理,避免数据库连接泄露。