上一章节我们通过jedis学习了实现存放机制,本章节我们通过jedisPool的操作理解连接池的应用,jedisPool的源码实现。
jedisPool连接池示例
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisPoolUtil {
private volatile JedisPool pool;
private Jedis jedis;
private final String host;
private final int port;
private String password;
public JedisPoolUtil(final String host, final int port) {
this.host = host;
this.port = port;
initPool();
}
public JedisPoolUtil(final String host, final int port, final String password) {
this.host = host;
this.port = port;
this.password = password;
initPool();
}
public JedisPool initPool() {
if (pool == null) {
if (password != null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(100);
config.setMaxWaitMillis(1000);
// 设置空间连接
config.setMaxIdle(10);
pool = new JedisPool(config, host, port, 2000, password);
} else {
pool = new JedisPool(host, port);
}
System.out.println("连接池创建成功");
}
return pool;
}
public Jedis initJedis() {
if(jedis==null) {
jedis = pool.getResource();
}
System.out.println("jedis创建成功");
return jedis;
}
public String set(String key, String value) {
if (jedis == null) {
jedis = initJedis();
}
String result = jedis.set(key, value);
if ("OK".equals(result)) {
jedis.close();
}
return result;
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
JedisPoolUtil jedisPoolUtil = new JedisPoolUtil("127.0.0.1", 4100);
System.out.println(jedisPoolUtil.set("test" + i, "value" + i));
}
}
}
使用jedisPool连接池,实例化jedisPool对象,jedisPool类提供了很多构造方法,可以根据自己的需要去选择构造方法,
public
JedisPool(String
host
,
int
port
) {
this
(
new
GenericObjectPoolConfig(),
host
,
port
, Protocol.
DEFAULT_TIMEOUT
,
null
,
Protocol.
DEFAULT_DATABASE
,
null
);
}
public
JedisPool
(
final
GenericObjectPoolConfig
poolConfig
,
final
String
host
,
int
port
,
final
int
connectionTimeout
,
final
int
soTimeout
,
final
String
password
,
final
int
database
,
final
String
clientName
,
final
boolean
ssl
,
final
SSLSocketFactory
sslSocketFactory
,
final
SSLParameters
sslParameters
,
final
HostnameVerifier
hostnameVerifier
) {
super
(
poolConfig
,
new
JedisFactory(
host
,
port
,
connectionTimeout
,
soTimeout
,
password
,
database
,
clientName
,
ssl
,
sslSocketFactory
,
sslParameters
,
hostnameVerifier
));
}
public
JedisPool(
final
GenericObjectPoolConfig
poolConfig
,
final
URI
uri
,
final
int
timeout
,
final
SSLSocketFactory
sslSocketFactory
,
final
SSLParameters
sslParameters
,
final
HostnameVerifier
hostnameVerifier
) {
this
(
poolConfig
,
uri
,
timeout
,
timeout
,
sslSocketFactory
,
sslParameters
,
hostnameVerifier
);
}
public
JedisPool(
final
GenericObjectPoolConfig
poolConfig
,
final
URI
uri
,
final
int
connectionTimeout
,
final
int
soTimeout
) {
super
(
poolConfig
,
new
JedisFactory(
uri
,
connectionTimeout
,
soTimeout
,
null
,
false
,
null
,
null
,
null
));
}
public
JedisPool(
final
GenericObjectPoolConfig
poolConfig
,
final
URI
uri
,
final
int
connectionTimeout
,
final
int
soTimeout
,
final
SSLSocketFactory
sslSocketFactory
,
final
SSLParameters
sslParameters
,
final
HostnameVerifier
hostnameVerifier
) {
super
(
poolConfig
,
new
JedisFactory(
uri
,
connectionTimeout
,
soTimeout
,
null
,
(
uri
.getScheme() !=
null
&&