目录
Jedis使用方式的介绍
Redis连接池介绍
创建连接池配置文件
单机版的Redis连接池
集群版的Redis连接池
总结
Jedis使用方式的介绍
Jedis就是Java实现的操作Redis的一套API集合,没有太多需要说明的,可以参考这篇博客,了解Jedis操作Redis相关API的用法,Java 使用Jedis操作redis
Redis连接池介绍
Redis连接池,也可以说是Jedis连接池,因为是利用Java实现的Jedis API进行连接池的创建、使用以及释放。
Redis不仅仅是缓存,他还是一个数据库,只不过是一个比较特别的数据库而已(NoSQL),所以Redis连接池和数据库连接池(比如Druid,C3P0,DBCP),原理上都是类似的。
Redis连接池可以大概分为两种,单机版和集群版,从名字上就可以看出区别,下面会对两种形式的连接池进行配置和使用。
创建连接池配置文件
创建配置文件,文件名和路径随意,我这里命名为redis_pool.properties,存放在项目的classpath目录下,内容如下:
redis_maxTotal=30
redis_maxIdle=15
redis_minIdle=5
redis_ip=127.0.0.1
redis_port=6379
单机版的Redis连接池
单机版,是指应用中只有一台Redis服务器,所有的操作都是在这台Redis服务器上面进行,此时配置和使用Redis只需要一个host+port(就是Redis服务器的host和port)。
package cn.ganlixin.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 学习单机版的Jedis连接池的用法
*/
public class TestJedisPool {
public static void main(String[] args) throws IOException {
// 读取Redis Pool的配置文件(位于classpath目录下)
InputStream _is = TestJedisPool.class.getClassLoader().getResourceAsStream("redis_pool.properties");
Properties props = new Properties();
props.load(_is);
// 读取配置项
int maxTotal = Integer.parseInt(props.getProperty("redis_maxTotal"));
int maxIdle = Integer.parseInt(props.getProperty("redis_maxIdle"));
int MinIdle = Integer.parseInt(props.getProperty("redis_minIdle"));
String ip = props.getProperty("redis_ip");
int port = Integer.parseInt(props.getProperty("redis_port"));
// 设置Redis Pool相关参数
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxTotal);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(MinIdle);
// 创建Jedis连接池
JedisPool jedisPool = new JedisPool(poolConfig, ip, port);
// 从连接池中获取jedis对象
Jedis jedis = jedisPool.getResource();
// 进行操作
jedis.set("name", "beyond");
// 归还连接
jedis.close();
// 关闭连接池
jedisPool.close();
}
}
集群版的Redis连接池
集群版与单机版的区别很明显,就是整个项目中,有多台Redis服务器,多台服务器以主从方式运行,并且Redis集群中Redis服务器的数量最少为6个,至于怎么搭建Redis集群,这里就不阐述了。
虽然搭建Redis集群的操作可能有点麻烦,但是在Java中使用Jedis来配置Jedis连接池却并不是特别复杂,也就比单机版的Redis集群多配置集群中Redis服务器节点的相关信息,代码如下:
package cn.ganlixin.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
public class TestJedisCluster {
public static void main(String[] args) throws IOException {
// 创建集群的节点集合
Set nodes = new HashSet<>();
// 添加节点到集群中
nodes.add(new HostAndPort("127.0.0.1", 6379));
nodes.add(new HostAndPort("127.0.0.1", 6380));
nodes.add(new HostAndPort("127.0.0.1", 6381));
nodes.add(new HostAndPort("127.0.0.1", 6382));
nodes.add(new HostAndPort("127.0.0.1", 6383));
nodes.add(new HostAndPort("127.0.0.1", 6384));
nodes.add(new HostAndPort("127.0.0.1", 6385));
nodes.add(new HostAndPort("127.0.0.1", 6386));
// 读取Redis Pool的配置文件(位于classpath目录下)
InputStream _is = TestJedisCluster.class.getClassLoader().getResourceAsStream("redis_pool.properties");
Properties props = new Properties();
props.load(_is);
// 读取配置项
int maxTotal = Integer.parseInt(props.getProperty("redis_maxTotal"));
int maxIdle = Integer.parseInt(props.getProperty("redis_maxIdle"));
int MinIdle = Integer.parseInt(props.getProperty("redis_minIdle"));
// 设置Redis Pool相关参数
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxTotal);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(MinIdle);
// 利用上面的集群节点nodes和poolConfig,创建redis集群连接池,并获取一个redis连接
JedisCluster jedisCluster = new JedisCluster(nodes, poolConfig);
// 利用获取的jedisCluster可以进行jedis的所有操作
System.out.println(jedisCluster.set("name", "beyond"));
System.out.println(jedisCluster.get("age"));
// 归还连接
jedisCluster.close();
}
}
总结
上面进行了单机版和集群版的Redis连接池进行了配置和使用,但是在平时的开发工作中,我们几乎不可能这么写,通常都是会和Spring进行整合,然后依靠Spring的IoC和DI,在需要redis操作的地方注入一下,就可以使用了。
Spring整合Redis,并且搭建Redis连接池的文章可以参考:Spring整合Redis,并配置Jedis连接池