Redis和Jedis的关系
简单来说,Jedis就是Redis官方推荐的Java连接Redis数据库的一个工具。
在Java中,Redis对应于Jedis就相当于关系型数据库(如MySQL)对应于JDBC。
使用Jedis前的准备工作
- 下载Jedis的jar包,点这里搜索jedis(不要搜索Jedis)
在Java中使用Jedis连接Redis
// 连接Redis(第一个参数是Redis的IP地址,第二个参数是Redis的端口号)
Jedis jedis = new Jedis("localhost", 6379);
// 尝试操作Redis
jedis.set("msg", "Hello World!");
String msg = jedis.get("msg");
System.out.println(msg); // 打印"Hello World!"
// 关闭Redis连接
jedis.close();
Jedis连接池
- Jedis提供了连接池机制,所以在生产环境中需要在Jedis连接池中获取对Redis的连接,Jedis的连接池类为redis.clients.jedis.JedisPool。
基于默认参数的Jedis连接池
// 初始化连接池类(使用默认连接池参数)
JedisPool jp = new JedisPool("localhost", 6379);
// 获取一个Jedis连接
Jedis jedis = jp.getResource();
-
上面这个示例,只为连接池指定了要连接的Redis的IP和端口号,而未指定连接池的其他参数。
-
查看源码,可以知道JedisPool的这个构造方法使用了GenericObjectPoolConfig这个类对象来设定Jedis连接池的默认参数:
-
GenericObjectPoolConfig类中初始化了各种连接池默认参数:
自定义Jedis连接池的参数
- JedisPoolConfig类是GenericObjectPoolConfig类的子类,因此可以使用它来自定义Jedis连接池的参数:
JedisPoolConfig jpc = new JedisPoolConfig();
jpc.setMaxTotal(30); // 设置连接池的最大连接数
jpc.setMaxIdle(8); // 设置连接池允许的最大空闲连接数
// 初始化连接池类(使用自定义连接池参数)
JedisPool jp = new JedisPool(jpc, "localhost", 6379);
// 从连接池获取一个Jedis连接
Jedis简易工具类开发
- 封装连接参数
src/jedisConfig.properties:
jedis.host=localhost
jedis.port=6379
jedis.maxTotal=30
jedis.maxIdle=10
- 工具类代码
JedisUtils.java:
public class JedisUtils {
private static JedisPool jp;
static {
// 加载Jedis连接池配置参数
InputStream is = JedisUtils.class.getResourceAsStream("/jedisConf.properties");
Properties prop = new Properties();
try {
prop.load(is);
} catch (IOException e) {
e.printStackTrace();
}
String host = prop.getProperty("jedis.host");
int port = Integer.parseInt(prop.getProperty("jedis.port"));
int maxTotal = Integer.parseInt(prop.getProperty("jedis.maxTotal"));
int maxIdle = Integer.parseInt(prop.getProperty("jedis.maxIdle"));
// 设置Jedis连接池参数
JedisPoolConfig jpc = new JedisPoolConfig();
jpc.setMaxTotal(maxTotal);
jpc.setMaxIdle(maxIdle);
// 初始化Jedis连接池
jp = new JedisPool(jpc, host, port);
}
// 从Jedis连接池获取连接
public static Jedis getJedis() {
return jp.getResource();
}
}