jedis使用,操作Redis数据库2

news2024/11/16 13:57:32

在刚刚ping通的基础上,再来通过jedis连接池连接redis

在resources下创建redis.properties配置文件,在配置文件中写如下内容

# 必配
# Redis服务器地址(域名或IP)
redis.host=192.168.40.100
# Redis服务器连接端口(Redis默认端口号是6379)
redis.port=6379
# Redis服务器连接密码(默认为空)
redis.password=

# 选配
# 最大连接数
redis.maxTotal=1000
# 最大空闲连接数
redis.maxIdle=30
# 最大的阻塞时长
redis.maxWait=60000
# 向资源池借用连接时是否做连接有效性检测(ping)。检测到的无效连接将会被移除
redis.testOnBorrow=true

创建JedisPoolUtil工具类,这些都是固定死的,可以直接cv


import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.time.Duration;
import java.util.Properties;

/** 单例模式优化Jedis连接池 */
public class JedisPoolUtil {
    // Redis服务器地址(域名或IP)
    private static String host;
    // Redis服务器连接端口(Redis默认端口号是6379)
    private static String port;
    // Redis服务器连接密码(默认为空)
    private static String password;

    // 最大连接数
    private static String maxTotal;
    // 最大空闲连接数
    private static String maxIdle;
    // 最大的阻塞时长
    private static String maxWait;
    // 向资源池借用连接时是否做连接有效性检测(ping)。检测到的无效连接将会被移除
    private static String testOnBorrow;


    private volatile static JedisPool jedisPool = null;
    private volatile static Jedis jedis = null;

    static {
        // 读取配置文件。加载redis.properties配置文件,通过反射的方式得到文件输入流
        InputStream inputStream = JedisPoolUtil.class.getClassLoader().getResourceAsStream("redis.properties");
        // 创建读取配置文件的properties对象,Properties继承了Hashtable类,Hashtable类实现了Map接口
        Properties properties = new Properties();
        try {
            /*
             * 1.方法作用:从字节输入流中读取键值对。该方法常用于读取配置文件。
             * 2.参数含义:参数中使用了字节输入流,通过流对象可以关联到某文件上,这样就能够加载文本中的数据了。文本中的数据,
             *           必须是键值对形式,可以使用空格、等号、冒号等符号分隔。
             */
            properties.load(inputStream);
            // 获取Redis数据库连接信息
            host = properties.getProperty("redis.host");
            port = properties.getProperty("redis.port");

            password = properties.getProperty("redis.password");

            maxTotal = properties.getProperty("redis.maxTotal");
            maxIdle = properties.getProperty("redis.maxIdle");
            maxWait = properties.getProperty("redis.maxWait");
            testOnBorrow= properties.getProperty("redis.testOnBorrow");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //私有化处理
    private JedisPoolUtil() {
    }


    // 返回Jedis连接池对象的静态方法
    private static JedisPool getInstance() {
        // 单例模式实现:双检锁/双重校验锁。这种方式采用双锁机制,安全且在多线程情况下能保持高性能
        if(jedisPool == null) {
            synchronized (JedisPoolUtil.class) {
                if(jedisPool == null) {
                    // 创建一个配置对象
                    JedisPoolConfig config = new JedisPoolConfig();
                    //可选项
                    config.setMaxTotal(Integer.parseInt(maxTotal)); // 资源池中的最大连接数
                    config.setMaxIdle(Integer.parseInt(maxIdle)); // 资源池允许的最大空闲连接数
                    // 当资源池连接用尽后,调用者的最大等待时间(单位为毫秒)
                    config.setMaxWait(Duration.ofMillis(Integer.parseInt(maxWait)));
                    // 向资源池借用连接时是否做连接有效性检测(业务量很大时候建议设置为false,减少一次ping的开销)
                    config.setTestOnBorrow(Boolean.valueOf(testOnBorrow));
                    // 初始化JedisPool              必选项
                    jedisPool = new JedisPool(config, host, Integer.parseInt(port));
                }
            }
        }
        return jedisPool;
    }

    /** 获取连接方法 */
    public static Jedis getJedis() {
        if (jedis == null) {
            // 获取连接
            jedis = getInstance().getResource();
        }
        return jedis;
    }
}

编写测试类进行测试: 通过连接池来连接redis

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis从入门到精通【进阶篇】之持久化 AOF详解

文章目录 0.前言1.详解1.1 AOF 文件的创建1.2. AOF 文件的写入1.3. AOF 文件的同步1. 3.1 同步磁盘上的所有数据1. 3.2 定期同步磁盘上的数据 1.4. AOF 文件的重写1.5. AOF 文件的恢复1.6. 小结 2. RDB和AOF混合方式3. Redis从入门到精通系列文章 0.前言 Redis 支持多种持久化…

Axure设计之滑动验证组件(动态面板)

一、案例效果 1、默认显示滑块、背景及提示文案; 2、滑块仅允许向右水平拖动,且不能超过背景区域; 3、滑块移动过程中,左侧区域样式跟随变化,右侧区域保持不变; 4、滑块为未拖动到最右侧时释放&#xff…

后书《乡村振兴战略下传统村落文化旅游设计》,交浅而言深者,愚也

后书《乡村振兴战略下传统村落文化旅游设计》,交浅而言深者,愚也

初学Spring boot (六) 自定义starter

学习回顾:初学Spring boot (五) 自动配置原理 自定义Starter 我们分析完毕了源码以及自动装配的过程,我们可以尝试自定义一个启动器来玩玩! 1、说明 启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理&am…

B2a实例学习记录

B2a简介 只是把hit存到了hitcollection,只是统计了各自event结果,将每次event的运行结果存起来了,并没有做总的求和 如何在B2a的基础上,实现对某一个chamber的能量的累加 1 hit和SD(sensitive detector) 每一个s…

越权访问漏洞

越权漏洞 越权访问漏洞示意图 一、越权访问漏洞简介 1.类型 水平越权:通过更换的某个ID之类的身份标识,从而使A账号获得(增删查改)B账号的数据 垂直越权:使用低权限身份的账号,发送高权限账号的请求&…

Java——内部类

一、成员内部类 类中的东西都是成员, 1.1、成员内部类定义 定义成员内部类的格式: class OuterClass {//外部类class InnerClass{//内部类(内部类实际是外部类的一个属性)} }示例 public class Outer {private static int r…

使用Selenium-PO设计模式提高Web自动化测试效率

PO(page object)设计模式是在自动化中已经流行起来的一种易于维护和减少代码的设计模式。在自动化测试中,PO对象作为一个与页面交互的接口。测试中需要与页面的UI进行交互时,便调用PO的方法。这样做的好处是,如果页面的…

.Net之AOP - 使用Fody的代码静态编织实现AOP

简介(好久没写博客了) 万物皆可AOP,本篇文章主要讲解在.Net7中使用Fody的代码静态编织实现AOP。 一、前言 AOP AOP是指面向切面编程 (Aspect Oriented Programming),相信大家都再熟悉不过了,…

上海市“小巨人”竞争力指数榜单发布!上海三思居全市总榜第四!分项NO.1!

6月25日下午,2022 年上海市专精特新“小巨人”市场竞争力指数榜单”在上海市上海联合产权交易所正式发布。上海三思电子工程有限公司多项荣登指数榜单: ●指数总榜TOP10,上海三思以83.69的高分位居全市8072家“小巨人”企业第四位&#xff0…

军用电子设备人工智能时代正在到来

源自: 战略前沿技术 Al的应用快速增长 更大的图景 人工智能技术的多面性 增强作战人员能力 数据依赖 人工智能和机器学习:前面的路 对人工智能应用保持警惕 声明:公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨,并不意味着支持其观…

vue+elementui实现联想购物商城,样式美观大方

目录 一、首页效果图对比 1.联想商城首页截图: 2.作者项目效果图: 二、商品详情效果图对比 1.联想官方截图: 2.作者项目截图: 三、项目实现 1.数据分离维护 2.首页推荐列表数据处理 3.商品详情数据动态获取完成交互 4.商品详…

MySQL原理探索——20幻读

20 幻读是什么?幻读会造成什么后果? 在上一篇文章最后,遗留了一个关于加锁规则的问题。今天,我们就从这个问题说起。 为了便于说明问题,这篇文章,我们就先使用一个小一点的表。建表和初始化语句如下&#…

【MySQL】MySQL PHP 语法,PHP MySQL 简介,查询,下载 MySQL 数据库, SQL 教程

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

探究Vue源码:mustache模板引擎(4) 了解mustache转换概念,简述tokens转换

上文 探究Vue源码:mustache模板引擎(3) 通过编写简单正则了解mustache转换思路我们用正则表达式构建了一个简易版的render模板编译函数 但是 我们有特意强调过 mustache的render函数并非用简单正则实现的 因为这样无法实现循环和一些比较复杂的逻辑处理 它的实现基理可以参考这…

Ubuntu系统安装JDK教程

今天新买了一台阿里云服务器,因为centos 不提供了更新支持,所以Linux系统选择了Ubuntu 系统,今天就出一期 Ubuntu上安装的一系列教程,今天就先从JDK开始。 Ubuntu系统安装JDK教程 1、 jdk下载2、安装 lrzsz 命令 (仅限…

FreeRTOS_系统内核控制函数

目录 1. 系统内核控制函数预览 2. 系统内核函数详解 2.1 函数 taskYIELD() 2.2 函数 taskENTER_CRITICAL() 2.3 函数 taskEXIT_CRITICAL() 2.4 函数 taskENTER_CRITICAL_FROM_ISR() 2.5 函数 taskEXIT_CRITICAL_FROM_ISR() 2.6 函数 taskDISABLE_INTERRUPTS() 2.7 函数…

1. 数字mic驱动分析

一般遇到的音频硬件都是这样的 由于项目不需要播放只需要录音,于是将模拟的mic换成了数字mic,直接通过i2s连接到soc 由于还要使用alsa架构进行录音,所以这里不能简单的写个代码读i2s数据,需要虚拟出一个codec 上面就是我们这次要分…

第九十六天学习记录:Linux基础:实用操作Ⅰ

注:第一张图与学习记录无关,是为了参与CSDN的AI绘图活动 CtrlC强制停止 1、Linux某些程序的运行,如果想要强制停止它,可以使用快捷键CtrlC中止 2、在命令输入错误时,也可以通过快捷键CtrlC快速退出当前输入 CtrlD…

projection介绍及EPSG:4326和EPSG:3857的投射转换

每个地图数据在Web端加载显示时,都需要设罝其投影坐标系。众所周知,地图是不规则的椭球体,如果我们将其展开到二维平面上,会发现地图与实际情况有出入。所以,人们提出 投影的方式来尽量减小失真的程度。 openlayers的…