【Redis】08 Jedis 02 连接池与操作封装

本机连接Redis可以默认构造器调用即可,链接参数已经封装好在初始化的过程中了

@Test
public void connectionForLocalConnect() {
    Jedis jedis = new Jedis();
    System.out.println(jedis);
    System.out.println(jedis.ping());
    System.out.println(jedis.info());
    jedis.close();
}

远程链接:

@Test
public void connectionForRemoteConnect() {
    Jedis jedis = new Jedis("服务器IP地址(公网)");
    jedis.auth("你所设置的访问密码"); // 没设置密码不调用此方法,如果设置了没调用,链接是可以成功,但是没有命令执行权限
    System.out.println(jedis);
    System.out.println(jedis.ping());
    System.out.println(jedis.info());
    jedis.close();
}

Jedis将Redis所有的操作命令封装成了方法供Java调用,这里不赘述了

 

2、连接池:

需要的依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.8.0</version>
</dependency>

使用连接池获取Jedis链接对象

@Test
public void testJedisPool(){
    final JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(100);
    jedisPoolConfig.setMaxIdle(10);

    final String remoteHost = "IP地址";
    final int remotePort = 6379;

    JedisPool jedisPool = new JedisPool(jedisPoolConfig, remoteHost, remotePort);

    Jedis jedis = jedisPool.getResource();

    jedis.auth("密码");

    System.out.println(jedis.info());
    jedis.close();
}nectTest

脱离硬编码的参数配置方式:

编写properties文件,名称随意,键名随意:

# ip-address
redis.local.ip = 127.0.0.1
# port-number
redis.local.port = 6379
# auth-password
# redis.local.password = ???

# 最大链接
redis.local.max.total = 20
# 最大空闲
redis.local.max.idle = 10
# 最小空闲
redis.local.min.total = 5

# 从连接池获取链接前,校验可用链接
redis.local.test.borrow = true
# 资源回收,校验可用链接
redis.local.test.return = true

编写Properties文件读取的工具类:

package cn.dzz.redis.util;

import java.io.InputStream;
import java.util.Properties;

/**
 * @author Echo42
 * @file Redis-Connect-Java
 * @create 2020年09月13日21:20
 * @description
 */
public class JedisPoolPropertyUtil {
    
    private JedisPoolPropertyUtil() {}

    private final static Properties properties;
    
    static {
        final String propertyFileName = "jedis-pool.properties";

        properties = new Properties();
        
        try {
            Class<JedisPoolPropertyUtil> jedisPoolPropertyUtilClass = JedisPoolPropertyUtil.class;
            
            ClassLoader classLoader = jedisPoolPropertyUtilClass.getClassLoader();
            
            InputStream classLoaderResourceAsStream = classLoader.getResourceAsStream(propertyFileName);
            
            properties.load(classLoaderResourceAsStream);
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    
    public static String getProperty(String keyName) {
        return properties.getProperty(keyName.trim());
    }
}

自定义连接池:

package cn.dzz.redis.util;

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

/**
 * @author Echo42
 * @file Redis-Connect-Java
 * @create 2020年09月13日21:26
 * @description
 */
public class CustomJedisPool {

    private static JedisPool jedisPool;

    private static String host = "127.0.0.1";
    private static int port = 6379;
    private static String password = null;

    private static int maxTotal = 100;
    private static int maxIdle = 50;
    private static int minIdle = 5;

    private static boolean borrowTest = false;
    private static boolean returnTest = false;

    static  {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        String propertyHost = JedisPoolPropertyUtil.getProperty("redis.local.ip");
        String propertyPort = JedisPoolPropertyUtil.getProperty("redis.local.port");
        String propertyPassword = JedisPoolPropertyUtil.getProperty("redis.local.password");
        String propertyMaxTotal = JedisPoolPropertyUtil.getProperty("redis.local.max.total");
        String propertyMaxIdle = JedisPoolPropertyUtil.getProperty("redis.local.max.idle");
        String propertyMinIdle = JedisPoolPropertyUtil.getProperty("redis.local.min.total");
        String propertyBorrow = JedisPoolPropertyUtil.getProperty("redis.local.test.borrow");
        String propertyReturn = JedisPoolPropertyUtil.getProperty("redis.local.test.return");

        if (propertyHost != null || "".equals(propertyHost)) host = propertyHost;
        if (propertyPort != null || "".equals(propertyPort)) port = Integer.parseInt(propertyPort);
        if (propertyPassword != null || "".equals(propertyPassword)) password = propertyPassword;
        if (propertyMaxTotal != null || "".equals(propertyMaxTotal)) maxTotal = Integer.parseInt(propertyMaxTotal);
        if (propertyMaxIdle != null || "".equals(propertyMaxIdle)) maxIdle = Integer.parseInt(propertyMaxIdle);
        if (propertyMinIdle != null || "".equals(propertyMinIdle)) minIdle = Integer.parseInt(propertyMinIdle);
        if (propertyBorrow != null || "".equals(propertyBorrow)) borrowTest = Boolean.parseBoolean(propertyBorrow);
        if (propertyReturn != null || "".equals(propertyReturn)) returnTest = Boolean.parseBoolean(propertyReturn);

        jedisPoolConfig.setMaxTotal(maxTotal);
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMinIdle(minIdle);

        jedisPoolConfig.setTestOnBorrow(borrowTest);
        jedisPoolConfig.setTestOnReturn(returnTest);

        jedisPool = new JedisPool(jedisPoolConfig, host, port);
    }

    public static Jedis getJedis() {
        Jedis jedis = jedisPool.getResource();
        if (password != null) jedis.auth(password);
        return jedis;
    }

    public static void resourceRelieve(Jedis jedis) {
        jedis.close();
    }
}

连接测试:

@Test
public void testCustomConnectorPool(){
    Jedis jedis = CustomJedisPool.getJedis();
    System.out.println(jedis);
    CustomJedisPool.resourceRelieve(jedis);
}

基础操作Try-Catch安全处理的封装

package cn.dzz.redis.util;

import com.sun.org.slf4j.internal.Logger;
import com.sun.org.slf4j.internal.LoggerFactory;
import redis.clients.jedis.Jedis;

/**
 * @author Echo42
 * @file Redis-Connect-Java
 * @create 2020年09月13日21:51
 * @description
 */
public class CustomJedisUtil {
    private CustomJedisUtil() {}

    private static final Logger logger = LoggerFactory.getLogger(CustomJedisUtil.class);

    private static Long expire(String key, int expireTime) {
        Jedis jedis = null;
        Long expire = null;
        
        try {
            jedis = CustomJedisPool.getJedis();
            expire = jedis.expire(key, expireTime);
        } catch (Exception exception) {
            exception.printStackTrace();
            logger.error("expire command error ", key, exception);
            CustomJedisPool.resourceRelieve(jedis);
        }
        CustomJedisPool.resourceRelieve(jedis);
        return expire;
    }


    //exTime的单位是秒
    public static String setExpireTime(String key, String value, int expireTime){
        Jedis jedis = null;
        String result = null;
        try {
            jedis = CustomJedisPool.getJedis();
            result = jedis.setex(key, expireTime, value);
        } catch (Exception e) {
            logger.error("setExpireTime command error",key,value,e);
            CustomJedisPool.resourceRelieve(jedis);
            return null;
        }
        CustomJedisPool.resourceRelieve(jedis);
        return result;
    }

    public static String set(String key,String value){
        Jedis jedis = null;
        String result = null;

        try {
            jedis = CustomJedisPool.getJedis();
            result = jedis.set(key,value);
        } catch (Exception e) {
            logger.error("set key:{} value:{} error",key,value,e);
            CustomJedisPool.resourceRelieve(jedis);
            return result;
        }
        CustomJedisPool.resourceRelieve(jedis);
        return result;
    }

    public static String get(String key){
        Jedis jedis = null;
        String result = null;
        try {
            jedis = CustomJedisPool.getJedis();
            result = jedis.get(key);
        } catch (Exception e) {
            logger.error("get key:{} error",key,e);
            CustomJedisPool.resourceRelieve(jedis);
            return result;
        }
        CustomJedisPool.resourceRelieve(jedis);
        return result;
    }

    public static Long del(String key){
        Jedis jedis = null;
        Long result = null;
        try {
            jedis = CustomJedisPool.getJedis();
            result = jedis.del(key);
        } catch (Exception e) {
            logger.error("del key:{} error",key,e);
            CustomJedisPool.resourceRelieve(jedis);
            return result;
        }
        CustomJedisPool.resourceRelieve(jedis);
        return result;
    }

}

测试:

    @Test
    public void testSample(){
        Jedis jedis = CustomJedisPool.getJedis();
        String username = CustomJedisUtil.set("username", "kujo-jotaro");
        System.out.println(username);
        username = CustomJedisUtil.get("username");
        System.out.println(username);
        jedis.close();
    }

 

posted @ 2020-09-13 22:09  emdzz  阅读(259)  评论(0)    收藏  举报