【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(); }

浙公网安备 33010602011771号