jedis连接池的基本概念
jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术。
jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。
目录结构
配置文件redis.properties
redis.maxTotal=100 redis.maxIdle=30 redis.minIdle=10 redis.url=192.168.1.181 redis.port=6379 redis.password=password redis.timeout=3000
连接池工具类JedisPoolUtil
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class JedisPoolUtil { private static JedisPool pool = null; static { //加载配置文件 InputStream in = JedisPoolUtil.class.getClassLoader().getResourceAsStream("redis.properties"); Properties pro = new Properties(); try { pro.load(in); } catch (IOException e){ e.printStackTrace(); System.out.println("加载配置文件失败"); } JedisPoolConfig poolConfig = new JedisPoolConfig(); //最大连接数 poolConfig.setMaxTotal(Integer.parseInt( pro.get("redis.maxTotal").toString())); //最大空闲连接数 poolConfig.setMaxIdle(Integer.parseInt( pro.get("redis.maxIdle").toString())); //最小空闲连接数 poolConfig.setMinIdle(Integer.parseInt( pro.get("redis.minIdle").toString())); int timeout = Integer.parseInt(pro.get("redis.timeout").toString()); String password = pro.get("redis.password").toString(); // public JedisPool(GenericObjectPoolConfig poolConfig, String host, int port, int timeout, String password) pool = new JedisPool(poolConfig, pro.get("redis.url").toString(),Integer.parseInt( pro.get("redis.port") .toString()),timeout,password); } public static Jedis getJedis(){ return pool.getResource(); } public static void release(Jedis jedis){ if(null != jedis){ jedis.close(); } } }
测试类JedisPoolTest
public class JedisPoolTest { public static void main(String[] args) { Jedis jedis = JedisPoolUtil.getJedis(); System.out.println(jedis.ping()); //查询所有key Set<String> keys = jedis.keys("*"); //遍历、key for(Iterator iterator = keys.iterator(); iterator.hasNext();){ String key = (String)iterator.next(); System.out.println(key); } } }
这个jedis连接池我使用了密码验证的,无密码验证或者需要其他配置的看JedisPool的构造方法,寻找适合自己的。