前言
Jedis是我们使用最多的Java客户端Redis,Jedis整合Redis有两种方式,分别是单机和集群。单机通常我们使用JedisPool连接池进行整合,集群通常我们使用JedisCluster进行整合。
准备
Jedis的github网址:https://github.com/xetorthio/jedis
Maven仓库信息:https://mvnrepository.com/artifact/redis.clients/jedis
Redis单机版安装和配置的博客参考:redis单机安装与配置
Redis集群版安装和配置的博客参考:redis集群安装与配置 redis集群安装与配置(官方)
本文使用的是3.2.0版本,jedis的maven依赖xml如下:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency>
连接Redis单机
单机通常我们使用JedisPool连接池进行整合。使用Jedis连接池,最重要的就是:一定要手动关闭连接(释放连接),否则会因为连接耗尽而导致操作阻塞。
- 使用示例
package cn.cwx.redis; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPoolExample { @Test public void testUsePool() { // 配置连接池 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(20); config.setMaxIdle(10); config.setMinIdle(5); // 创建连接池 JedisPool jedisPool = new JedisPool(config, "localhost", 6379); Jedis jedis = jedisPool.getResource(); // 使用jedis进行操作 jedis.set("name", "cwx"); // 用完之后,一定要手动关闭连接(归还给连接池) jedis.close(); } }
- 封装工具类
对于jedis连接池来说,只需要初始化一次即可,可以将其在工具类中实现:
package cn.cwx.redis.util; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * 描述: Jedis工具类(封装了连接池) */ public class JedisUtils { private static JedisPool jedisPool; static { // 配置连接池 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(5); config.setMaxIdle(3); config.setMinIdle(2); // 创建连接池 jedisPool = new JedisPool(config, "localhost", 6379); } /** * 获取redis连接 */ public static Jedis getJedis() { return jedisPool.getResource(); } }
注:配置项可以从配置文件中获取
工具类使用示例:
package cn.cwx.redis; import cn.cwx.redis.util.JedisUtils; import org.junit.Test; import redis.clients.jedis.Jedis; public class JedisPoolExample { @Test public void testJedisPoolUtil() { Jedis jedis = JedisUtils.getJedis(); jedis.set("name", "cwx"); // 一定要关闭jedis连接 jedis.close(); } }
连接Redis集群
集群通常我们使用JedisCluster进行整合。跟单机相比,最大的区别是:不需要手动释放连接
package cn.cwx.redis; import org.junit.Test; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; import java.util.HashSet; import java.util.Set; /** * Jedis操作Redis集群 */ public class JedisClusterExample { @Test public void clusterWithPool() { // 设置redis集群的节点信息 Set<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.1.3", 6379)); nodes.add(new HostAndPort("192.168.1.4", 6379)); nodes.add(new HostAndPort("192.168.1.5", 6379)); // 配置连接池 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(5); jedisPoolConfig.setMaxIdle(3); jedisPoolConfig.setMinIdle(2); // 创建jediscluster,传入节点列表和连接池配置 JedisCluster cluster = new JedisCluster(nodes, jedisPoolConfig); // 和jedis的使用方式几乎一样 cluster.set("name", "cwx"); // 使用完毕后,不需要释放连接 // cluster.close(); } }