redis连接池——JedisPool和JedisCluster的介绍与使用

redis连接池——JedisPool和JedisCluster的介绍与使用

目录

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连接池

相关推荐