1、工具类代码
package com.yanghui;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author YH
* DCL 懒汉式
* 1、确保一个类只有一个实例对象
* 2、一个私有静态变量(实例对象)
* 3、一个公共静态方法(获取实例对象的方法)
*/
public class JedisPoolUtil {
/** volatile 保证 内存可见性 */
private static volatile JedisPool jedisPool = null;
/** 构造器私有 */
private JedisPoolUtil() { }
/** 获取 JedisPool 的实例对象方法*/
public static JedisPool getJedisPoolInstance() {
/**
* 如果 jedisPoll 为 null,说明 jedisPool 还没有实例对象
*/
if (jedisPool == null) {
/**
* 加锁,防止多线程下争抢资源,同时 new 出多个实例对象
*/
synchronized (JedisPoolUtil.class) {
/**
* 再判断一次 jedisPool 是否真的为 null
* 以防在加锁的时候已经有线程 new 了一个实例对象了
*/
if (jedisPool == null) {
/** 这个类可以对连接池进行配置,如最大连接数等 */
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
/** 设置 JedisPool 最大连接数 */
jedisPoolConfig.setMaxTotal(10);
jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
}
}
}
/** 返回 JedisPool 实例 */
return jedisPool;
}
/**
* 释放资源
*/
public static void release(JedisPool jedisPool, Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}
2、测试工具类
(1)测试代码
package com.yanghui;
import redis.clients.jedis.JedisPool;
/**
* @author YH
*/
public class JedisPoolTest {
public static void main(String[] args) {
JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();
JedisPool jedisPool1 = JedisPoolUtil.getJedisPoolInstance();
System.out.println("====测试两个类实例是否一致====");
System.out.println(jedisPool == jedisPool1);
}
}
(2)运行结果
3、开始使用
(1)示例代码
package com.yanghui;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
/**
* @author YH
*/
public class JedisPoolTest {
public static void main(String[] args) {
JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();
Jedis jedis = null;
try {
/** 从连接池中获取资源 */
jedis = jedisPool.getResource();
/** 现在就可以开始使用了 */
jedis.set("k1", "v1");
System.out.println(jedis.get("k1"));
} catch (Exception e) {
e.printStackTrace();
} finally {
/** 释放资源 */
JedisPoolUtil.release(jedis);
}
}
}
(2)运行截图