zoukankan      html  css  js  c++  java
  • Redis——使用Jedis操作Redis

    前言

    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();
        }
    }
  • 相关阅读:
    yii2框架(一)安装
    修改hosts搭建本地站点
    php版本管理工具composer安装及使用
    nodejs学习笔记Node.js 调试命令
    angular自定义指令命名的那个坑
    MongoDB Windows环境安装及配置( 一)
    JavaSE 面试题: 类初始化和实例初始化等
    JavaSE 面试题: 成员变量与局部变量
    JavaSE 面试题: 方法的参数传递机制
    JavaSE 笔试题: 自增变量
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/12802578.html
Copyright © 2011-2022 走看看