目录
Jedis 是 Redis 官方首选的 Java 客户端开发包。
Jedis的基本用法:
Jedis直连
pom文件中引入:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
public class JedisTest {
@Test
public void jedis1(){
//创建连接Redis服务器的客户端
Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.set("hello","world");
String value = jedis.get("hello");
System.out.println(value);
}
}
jedis直连方式,每次都会新建TCP连接,使用后再断开连接,对于频繁访问Redis的场景显然不是高效的使用方式。
JedisPool:
使用连接池方式对Jedis连接进行管理。Jedis对象预先存放在池子中(JedisPool),每次要连接Redis,只需要在池子中借,用完了再归还给池子。
JdeisPool这个类作为对Jedis的连接池,使用了Apache的通用对象池工具common-pool作为资源的管理工具。
public class JedisPoolTest {
@Test
public void jedis2(){
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
//初始化Jedis连接池
JedisPool jedisPool = new JedisPool(poolConfig,"192.168.25.129",6379);
Jedis jedis = null;
try{
//从连接池获取jedis对象
jedis = jedisPool.getResource();
//执行操作
jedis.get("hello");
}catch (Exception e){
System.out.println(e.getMessage());
}finally {
if (jedis != null){
// 使用JedisPool ,close操作不是关闭连接,代表归还连接池
jedis.close();
}
}
}
}
使用JedisPool ,close操作不是关闭连接,代表归还连接池。
dataSource != null 代表使用的是连接池,jedis.close()代表归还连接给连接池。
dataSource = null 代表直连,jedis.close()代表关闭连接
GenericObjectPoolConfig使用的是默认配置,实际它提供了很多参数
比较
Jedis直连 | Jedis连接池(Jedis Pool) |
每次都会新建TCP连接,使用后再断开连接,存在每次新建/关闭TCP连接的开销 | 连接池的方式是可以预先初始化好Jedis连接,所以每次只需要从Jedis连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。 |
无法限制Jedis对象的个数,极端情况下可能会造成连接泄露 | 可以有效保护和控制资源的使用 |
Jedis对象线程不安全 |
|
简单方便,适用于少量长期连接的场景 | 使用相对麻烦,尤其在资源的管理上需要很多参数来保证,一旦规划不合理也会出现问题 |