jedis使用,操作Redis数据库2

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

        在resources下编写redis.properties配置文件,切记是redis.properties而不是application.properties

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

import com.leq.product.util.JedisPoolUtil;
import redis.clients.jedis.Jedis;

public class RedisTests {
    public static void main(String[] args) {
        Jedis jedis = JedisPoolUtil.getJedis();
        System.out.println(jedis.ping());
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值