千家信息网

怎么用Java实现redis连接池

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章主要介绍"怎么用Java实现redis连接池",在日常操作中,相信很多人在怎么用Java实现redis连接池问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用
千家信息网最后更新 2024年11月19日怎么用Java实现redis连接池

这篇文章主要介绍"怎么用Java实现redis连接池",在日常操作中,相信很多人在怎么用Java实现redis连接池问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Java实现redis连接池"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.Redis 客户端

1.1.Redis Desktop Manager

使用称手的工具,做起事来 事半功倍 ,用 redis-cli 自然不错。我推荐一款我经常用的 Redis 可视化工具,Redis Desktop Manager

2.Redis 连接池

2.2.0.连接池

池技术被广泛使用在系统开发中,像 JDBC 连接池、线程池等。连连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。

在处理一个任务时,我们大多情况要在数毫秒级别就完成,如果重复创建、关闭资源,会占用较长时间和大量系统资源。

  • 使用连接池优势

  1. 减少连接创建时间

连接在系统初始化时就创建完成,需要时直接从池中取用,减少了时间开销。

  1. 简化的编程模式

当使用连接池时,每一个单独的线程能够像创建了一个自己的 JDBC 连接一样操作。

  1. 受控的资源使用

连接池能够控制一个模块的资源占用率,不会让一个模块资源占用过高,导致整个系统崩溃。

2.1.Redis 连接池

2.1.1.前言引入

在以前没有开源连接池时,很多人自写连接池工具,简单来说就是创建一个集合,存放一批连接,动态维护着。保证每个连接都是有效的。

2.1.2.Redis 连接池

本教程涉及到的一些代码都是 Java 语言编写。

maven 依赖,引入 pom.xml 文件

  • pom.xml

    redis.clients    jedis    3.3.0
  • RedisUtil.java

public final class RedisUtil {    //IP 地址    private static String ADDR = "127.0.0.1";    //端口号    private static int PORT = 6379;    //redis 服务端密码    private static String PWD = "123456";    //可用连接实例最大数目,默认为 8,若赋值 -1,表示不被限制    private static Integer MAX_TOTAL = 1024;    //控制一个连接池最多有多少个状态为空闲的 jedis 实例,默认值为 8    private static Integer MAX_IDLE = 200;    //等待可用连接最大的等待时间,单位 ms,默认值 -1,表示永不超时,若等待超时抛出 JedisConnectionException    private static Integer MAX_WAIT_MILLIS = 10000;    //超时    private static Integer TIMEOUT = 10000;    //在用一个 jedis 实例时,是否提前进行 validate 操作,若结果为 true 则 jedis 实例可用    private static Boolean TEST_ON_BORROW = true;    //jedis 连接池    private static JedisPool jedisPool = null;    /**     * 初始化 jedis 连接池的静态块,RedisPool 第一次类加载时执行,以后便不再执行     */    static {        try {            JedisPoolConfig conf = new JedisPoolConfig();            /*             * 高版本 jedis jar 中 JedisPoolConfig 没有 setMaxActive 和 setMaxWait 属性,因为官方在高版本               * 中启用了此方法,用以下两个属性替换             * maxActive ==> maxTotal             * maxWait ==> maxWaitMillis             */            //设置连接实例最大数目            conf.setMaxTotal(MAX_TOTAL);            //设置最多多少空闲的 jedis 实例            conf.setMaxIdle(MAX_IDLE);            //设置等待可用连接的最大时间            conf.setMaxWaitMillis(MAX_WAIT_MILLIS);            //设置是否提前进行测试借用            conf.setTestOnBorrow(TEST_ON_BORROW);            //新建 jedis 连接池            jedisPool = new JedisPool(conf, ADDR, PORT, TIMEOUT, PWD);        }        catch (Exception e) {            e.printStackTrace();        }    }    /*     * 获取 jedis 实例来操作数据,每次使用完要将连接返回给连接池 jedis.close()     * @return     */    public synchronized static Jedis getRedis() {        try {            if(jedisPool != null) {                //获取 jedis 实例                Jedis jedis = jedisPool.getResource();                return jedis;            }            else{                System.out.println("没有找到 Jedis 连接池!");                return null;            }        } catch (Exception e) {            e.printStackTrace();            return null;        }    }    /*     * 用来回收 Jedis 对象资源,用户需要用到此方法释放资源,否则一直占用资源,在新版本中,`returnResource(jedis) 将被废弃不推荐使用,`直接调用 `jedis.close();` 归还连接到连接池。     * @param Jedis jedis     */    public synchronized static void returnJedis(Jedis jedis) {        try {            if(jedis != null) {                //回收 jedis 对象资源                jedisPool.returnResource(jedis);                System.out.println("Jedis 被成功回收!");            }        } catch (Exception e) {            e.printStackTrace();        }    }}

到此,关于"怎么用Java实现redis连接池"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0