专栏首页JavaPubrodert单排学习redis进阶【白银一】
原创

rodert单排学习redis进阶【白银一】

redis之白银一

说些题外话,最近帝都疫情又严重,大家都身处时代洪流中,这不是个别人能左右的,希望你能保护好自己,天天开心。

toc

前言

声明:参考来源互联网,有任何争议可以留言。站在前人的肩上,我们才能看的更远。

前文推荐阅读:

rodert单排学习redis入门【黑铁】

rodert 单排学习 redis 进阶【青铜】

1.Redis 客户端

1.1.Redis Desktop Manager

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

启动界面如下:

至于安装方式是 一键安装

官网下载地址:https://redisdesktop.com/pricing

学生和学习者可以公众号后台回复:【666】,免费获取。

2.Redis 连接池

2.2.0.连接池

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

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

  • 使用连接池优势
  1. 减少连接创建时间

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

  1. 简化的编程模式

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

  1. 受控的资源使用

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

2.1.Redis 连接池

2.1.1.前言引入

Redis 修炼之连接池篇,前面讲了Redis入门篇:rodert单排学习redis入门【黑铁】rodert 单排学习 redis 进阶【青铜】,对 Redis 基本数据类型的操作做了讲解。

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

2.1.2.Redis 连接池

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

maven 依赖,引入 pom.xml 文件

  • pom.xml
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>
  • 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();
        }
    }
}

-

本教程纯手打,致力于最实用教程,不需要什么奖励,只希望多多转发支持。 欢迎来我公众号,希望可以结识你,也可以催更,微信搜索:JavaPub

有任何问题都可以来谈谈 !

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Git【入门】这一篇就够了

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。除了项目,你可以对任何类型的文件进行版本控制。

    用户2686511
  • 第一个Spring程序(代码篇)

    在 javapub.rodert 包下创建 PersonDao 的实现类 PersonDaoImpl

    用户2686511
  • 一篇告诉你什么是Spring

    然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(...

    用户2686511
  • 自己手动写代码实现数据库连接池

    池:一个高级的集合体(集合存储元素 + 管理方式–>提高效率),是对外提供同一种类型对象的集合,如(线程池、数据库连接池)  特性:复用性(每条连接可重复使用)...

    小勇DW3
  • GitHub扒皮:中国996企业、外资955企业曝光,有你家公司吗?

    关于996工作制的不满其实由来已久,随着大量公司加入裁员大军,一天工作12小时、一周工作6天的情况也开始越来越普遍。对工作时长抱怨最多的人群无疑是程序员,自嘲经...

    新智元
  • 造了个轮子 XML 2 JSON

    许杨淼淼
  • Spring Boot 2.x (二):Spring Boot 基础配置

    在 Spring Boot 中,配置文件有两种不同的格式,一种是 properties ,另一种是 yaml。

    阿宝哥
  • tp5之验证码不显示

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • 《Spring实战》摘录 - 29

    Q: #18.4.2 | convertAndSendToUser()能够发送消息给特定用户

    用户1335799
  • JConsole、VisualVM 依赖的 JMX 技术到底是什么

    如果你之前没接触过,一定会出现疑问三连击,"这是个什么玩意儿?干嘛的?有啥用?"。

    古时的风筝

扫码关注云+社区

领取腾讯云代金券