在刚刚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