package com.terra.proxy.util; import com.terra.proxy.properties.JedisProperties; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.exceptions.JedisException; import javax.annotation.PostConstruct; import java.util.List; import java.util.Map; /** * @author Loger * Date: 2018-07-30 * TIme: 23:54 * Description : */ @Component public class JedisUtils { private static Logger logger = LoggerFactory.getLogger(JedisUtils.class); private static JedisPoolConfig config; private static JedisPool jedisPool; @Autowired private JedisProperties jedisProperties; private static JedisProperties properties; @PostConstruct public void init() { properties = this.jedisProperties; config = new JedisPoolConfig(); config.setMaxIdle(properties.getMaxIdle()); jedisPool = new JedisPool(config, properties.getHost(), properties.getPort()); } /** * 获取jedis * * @return */ public static Jedis getJedis() { Jedis jedis = jedisPool.getResource(); if (StringUtils.isNotEmpty(properties.getPassword())) { jedis.auth(properties.getPassword()); } return jedis; } /** * jedis放回连接池 * * @param jedis */ public static void close(Jedis jedis) { //从源码可以分析得到,如果是使用连接池的形式,这个并非真正的close,而是把连接放回连接池中 if (jedis != null) { jedis.close(); } } /** * get * * @param key * @return */ public static String get(String key) { Jedis jedis = null; try { jedis = getJedis(); return jedis.get(key); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } /** * set * * @param key * @param value * @return */ public static void set(String key, String value) { Jedis jedis = null; try { jedis = getJedis(); jedis.set(key, value); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } /** * set with expire milliseconds * * @param key * @param value * @param seconds * @return */ public static void set(String key, String value, long seconds) { Jedis jedis = null; try { jedis = getJedis(); jedis.set(key, value, "NX", "EX", seconds); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } public static Long incr(String key) { Jedis jedis = null; try { jedis = getJedis(); return jedis.incr(key); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } public static void hset(String key, String field, String value) { Jedis jedis = null; try { jedis = getJedis(); jedis.hset(key, field, value); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } public static String hget(String key, String field) { Jedis jedis = null; try { jedis = getJedis(); return jedis.hget(key, field); } catch (Exception e) { e.printStackTrace(); } finally { close(jedis); } return null; } public static Map hgetAll(String key) { Jedis jedis = null; try { jedis = getJedis(); return jedis.hgetAll(key); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } /** * @param timeout 0表示永久 单位秒 * @param key key * @return [key, value] */ public static String blpop(int timeout, String key) { Jedis jedis = null; try { jedis = getJedis(); List list = jedis.blpop(timeout, key); return list.get(1); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } public static String blpop(String key) { Jedis jedis = null; try { jedis = getJedis(); List list = jedis.blpop(0, key); return list.get(1); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } public static void lpush(String key, String... value) { Jedis jedis = null; try { jedis = getJedis(); jedis.lpush(key, value); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } } /** * @param timeout 0表示永久 单位秒 * @param key key * @return [key, value] */ public static String brpop(int timeout, String key) { Jedis jedis = null; try { jedis = getJedis(); List list = jedis.brpop(timeout, key); return list.get(1); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } public static String brpop(String key) { Jedis jedis = null; try { jedis = getJedis(); List list = jedis.brpop(0, key); return list.get(1); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } public static void rpush(String key, String... value) { Jedis jedis = null; try { jedis = getJedis(); jedis.rpush(key, value); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } } /** * 获取key过期时间 -1表示永久 -2表示该key不存在 * * @param key * @return */ public static long ttl(String key) { Jedis jedis = null; try { jedis = getJedis(); return jedis.ttl(key); } catch (Exception e) { e.printStackTrace(); throw new JedisException(e.getMessage(), e); } finally { close(jedis); } } }