连接池的创建
package com.jt.redis;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class JedisDataSource {
/**
* Jedis连接池对象
* volatile 关键字作用
* 1)进制JVM指令重排序
* 2)保证线程可见性
* 3)不保证原子性
*/
private static volatile JedisPool jedisPool;
//第一种
public /*synchronized*/ static Jedis getConnection(){
//加锁加双重校验 安全有效率
if(jedisPool == null){
synchronized (JedisDataSource.class){
if(jedisPool == null){
System.out.println("== create Jedis Pool ===");
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxTotal(16); //最大连接数 2倍CPU核 + 磁盘数
config.setMaxIdle(8); //最大空闲连接数
config.setMinIdle(4); //最小空闲连接数
jedisPool =
new JedisPool(config,"192.168.126.128", 6379);
//
}
}
}
return jedisPool.getResource();
}
//通过局部变量的定义,优化系统性能 第二种
public static Jedis getConnection02(){
//加锁加双重校验 安全有效率
JedisPool pool = jedisPool;
if(pool == null){
synchronized (JedisDataSource.class){
pool = jedisPool;
if(jedisPool == null){
System.out.println("== create Jedis Pool ===");
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxTotal(16); //最大连接数 2倍CPU核 + 磁盘数
config.setMaxIdle(8); //最大空闲连接数
config.setMinIdle(4); //最小空闲连接数
jedisPool =
new JedisPool(config,"192.168.126.128", 6379);
//
}
}
}
return jedisPool.getResource();
}
//测试连接池的代码
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
JedisDataSource.getConnection();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
JedisDataSource.getConnection();
}
});
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
JedisDataSource.getConnection();
}
});
t1.start();
t2.start();
t3.start();
}
}
基于连接池使用