目录

  1. 概述
  2. 联通测试
  3. Jedis 主从复制
  4. Jedis 连接池
  5. 连接池常用参数
  6. 附录

概述

jedis 是 java redis 的简写,目的是通过 java 程序进行 redis 相关操作,类似于 JDBC 没有必要进行深入的研究,目前已经有比较好的 Spring 与 Redis 的整合方案。

如果想要使用此中间件,只需要向项目中引入以下依赖即可

1
2
3
4
5
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.1.0</version>
</dependency>

联通测试

引入依赖之后,仅需要通过如下步骤即可测试 Redis 的联通性,查看项目是否使用 Jedis 成功

1
2
3
4
5
6
7
8
9
public class TestRedis {
public static void main(String[] args) {
String address = "127.0.0.1";
String port = "6379";
Jedis jedis = new Jedis(address, Integer.parseInt(port));
System.out.println(jedis.ping());
//输出PONG,redis连通成功
}
}

Jedis 主从复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import redis.clients.jedis.Jedis;

public class TestMS {
public static void main(String[] args) {
Jedis jedis_M = new Jedis("127.0.0.1", 6379);
Jedis jedis_S = new Jedis("127.0.0.1", 6380);

jedis_S.slaveof("127.0.0.1", 6379);

jedis_M.set("class", "1122V2");

String result = jedis_S.get("class");//可能有延迟,需再次启动才能使用
System.out.println(result);
}
}

Jedis 连接池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class JedisPollUtils {
//懒汉式单例模式创建连接池
private static volatile JedisPool jedisPool = null;

private JedisPollUtils() {
}

public static JedisPool getJedisPoolInstance() {
if (jedisPool == null) {
synchronized (JedisPollUtils.class) {
if (null == jedisPool) {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(2);
jedisPoolConfig.setMaxIdle(32);
jedisPoolConfig.setMaxWaitMillis(100 * 1000);
jedisPoolConfig.setTestOnBorrow(true);
jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
}
}
}
return jedisPool;
}

public static void release(Jedis jedis) {
if (null != jedis) {
//回收连接,会将当前连接分配给另一个线程
jedis.close();
}
}
}

连接池常用参数

参数含义
MaxTotal控制一个 pool 可分配多少个 jedis 实例,通过 pool.getResource()来获取;如果赋值为-1,则表示不限制;
maxIdle控制一个 pool 最多有多少个状态为 idle(空闲)的 jedis 实例
maxWait表示当 borrow 一个 jedis 实例时,最大的等待时间,如果超过等待时间,则直接抛 JedisConnectionException
testOnBorrow获得一个 jedis 实例的时候是否检查连接可用性(ping());如果为 true,则得到的 jedis 实例均是可用的
testOnReturnreturn 一个 jedis 实例给 pool 时,是否检查连接可用性(ping())

附录

JedisAPI 整理