<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="2048" /> <property name="maxIdle" value="200" /> <property name="numTestsPerEvictionRun" value="1024" /> <property name="timeBetweenEvictionRunsMillis" value="30000" /> <property name="minEvictableIdleTimeMillis" value="-1" /> <property name="softMinEvictableIdleTimeMillis" value="10000" /> <property name="maxWaitMillis" value="1500" /> <property name="testOnBorrow" value="true" /> <property name="testWhileIdle" value="true" /> <property name="testOnReturn" value="false" /> <property name="jmxEnabled" value="true" /> <property name="jmxNamePrefix" value="youyuan" /> <property name="blockWhenExhausted" value="false" /> </bean> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg index="0" ref="jedisPoolConfig"/> <constructor-arg index="1" value="${redis.slaver.host}"/> <constructor-arg index="2" value="${redis.slaver.port}" type="int"/> <!-- <constructor-arg index="3" value="${redis.timeout}" type="int"/> <constructor-arg index="4" value="${redis.password}"/> --> </bean> </beans>
#最大分配的对象数 redis.pool.maxActive=1024 #最大能够保持idel状态的对象数 redis.pool.maxIdle=200 #当池内没有返回对象时,最大等待时间 redis.pool.maxWait=1000 #当调用borrow Object方法时,是否进行有效性检查 redis.pool.testOnBorrow=true #当调用return Object方法时,是否进行有效性检查 redis.pool.testOnReturn=true #IP #redis.slaver.host=192.168.31.125 redis.slaver.host=127.0.0.1 #Port redis.slaver.port=6379
package com.dongly.sssr.orm; import java.util.List; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; @Component public class RedisUtil { public static Logger logger = LoggerFactory.getLogger(RedisUtil.class); @Autowired private JedisPool jedisPool; /** * 回收jedis * * @param jedis */ private void returnJedis(Jedis jedis) { if (jedis != null) { try { jedis.close(); } catch (Exception e) { logger.error("returnJedis error.", e); } } } /** * 设置一个key的过期时间(单位:秒) * * @param key * key值 * @param seconds * 多少秒后过期 * @return true:设置了过期时间 false:没有设置过期时间/不能设置过期时间 */ public Boolean expire(String key, int seconds) { if (key == null || key.equals("")) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); Long expire = jedis.expire(key, seconds); return expire == 1 ? true : false; } catch (Exception ex) { logger.error("expire error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 设置一个key在某个时间点过期 * * @param key * key值 * @param unixTimestamp * unix时间戳,从1970-01-01 00:00:00开始到现在的秒数 * @return true:设置了过期时间 false:没有设置过期时间/不能设置过期时间 */ public Boolean expireAt(String key, long unixTimestamp) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); Long expireAt = jedis.expireAt(key, unixTimestamp); return expireAt == 1 ? true : false; } catch (Exception ex) { logger.error("expireAt error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 截断一个List * * @param key * 列表key * @param start * 开始位置 从0开始 * @param end * 结束位置 * @return true:表示成功 */ public Boolean trimList(String key, long start, long end) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.ltrim(key, start, end); return true; } catch (Exception ex) { logger.error("trimList error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 检查Set 元素个数 * * @param key * @return -1:表示key 为空 */ public long setSize(String key) { if (StringUtils.isEmpty(key)) { return -1; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.scard(key); } catch (Exception ex) { logger.error("setSize error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return -1; } /** * 添加到Set中(同时设置过期时间) * * @param key * key值 * @param seconds * 过期时间 单位s * @param value * @return 成功true */ public boolean addSet(String key, int seconds, String... value) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); Boolean addSet = addSet(key, value); if (addSet) { expire(key, seconds); return true; } } catch (Exception ex) { logger.error("addSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 添加到Set中 * * @param key * @param value * @return -1 表示添加失败 1:成功 */ public Boolean addSet(String key, String... value) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.sadd(key, value); return true; } catch (Exception ex) { logger.error("addSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * @param key * @param value * @return 判断value值是否包含在set中 */ public boolean containsInSet(String key, String value) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.sismember(key, value); } catch (Exception ex) { logger.error("containsInSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 获取Set * * @param key * @return 返回null或者【】 表示 没有这个➹ */ public Set<String> getSet(String key) { if (StringUtils.isEmpty(key)) { return null; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.smembers(key); } catch (Exception ex) { logger.error("getSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return null; } /** * 从set中删除value * * @param key * @return */ public boolean removeSetValue(String key, String... value) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); Long srem = jedis.srem(key, value); return true; } catch (Exception ex) { logger.error("removeSetValue error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 从list中删除value 默认count 1 * * @param key * @param values * 值list * @return */ public int removeListValue(String key, List<String> values) { return removeListValue(key, 1, values); } /** * 从list中删除value * * @param key * @param count * @param values * 值list * @return */ public int removeListValue(String key, long count, List<String> values) { int result = 0; if (values != null && values.size() > 0) { for (String value : values) { if (removeListValue(key, count, value)) { result++; } } } return result; } /** * 从list中删除value * * @param key * @param count * 要删除个数 * @param value * @return */ public boolean removeListValue(String key, long count, String value) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.lrem(key, count, value); return true; } catch (Exception ex) { logger.error("containsInSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 截取List * * @param key * @param start * 起始位置 * @param end * 结束位置 * @return */ public List<String> rangeList(String key, long start, long end) { if (StringUtils.isEmpty(key)) { return null; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.lrange(key, start, end); } catch (Exception ex) { logger.error("rangeList 出错[key=" + key + " start=" + start + " end=" + end + "]" + ex.getMessage(), ex); returnJedis(jedis); } finally { returnJedis(jedis); } return null; } /** * List长度 * * @param key * @return */ public long countList(String key) { if (StringUtils.isEmpty(key)) { return -1; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.llen(key); } catch (Exception ex) { logger.error("countList error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return -1; } /** * 添加到List中(同时设置过期时间) * * @param key * key值 * @param seconds * 过期时间 单位s * @param value * @return */ public boolean addList(String key, int seconds, String... value) { boolean result = addList(key, value); if (result) { return expire(key, seconds); } return false; } /** * 添加到List * * @param key * @param value * @return */ public boolean addList(String key, String... value) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.rpush(key, value); return true; } catch (Exception ex) { logger.error("addList error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 添加到List(只新增) * @param key * @param value * @return */ public boolean addList(String key, List<String> list) { if (key == null || list == null || list.size() == 0) { return false; } for (String value : list) { addList(key, value); } return true; } /** * 获取List * * @param key * @return */ public List<String> getList(String key) { if (StringUtils.isEmpty(key)) { return null; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.lrange(key, 0, -1); } catch (Exception ex) { logger.error("getList error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return null; } /** * 设置HashSet对象 * * @param domain 域名 * @param key 键值 * @param value Json String or String value * @return -1:添加失败 0:field原来在map里面已经存在 1:field是一个新的字段 */ public Long setHSet(String key, String field, String value) { if (StringUtils.isEmpty(key)) { return -1l; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.hset(key, field, value); } catch (Exception ex) { logger.error("setHSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return -1l; } /** * 获得HashSet对象 * @param field 域名 * @param key 键值 * @return Json String or String value */ public String getHSet(String key, String field) { if (StringUtils.isEmpty(key)) { return null; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.hget(key, field); } catch (Exception ex) { logger.error("setHSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return null; } /** * 删除HashSet对象 * * @param domain * 域名 * @param key * 键值 * @return 删除的记录数 -1 表示异常 0 表示删除失败 */ public long delHSet(String key, String field) { if (StringUtils.isEmpty(key)) { return -1; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.hdel(key, field); } catch (Exception ex) { logger.error("delHSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return -1; } /** * 判断Hash field是否存在 * * @param domain * 域名 * @param key * 键值 * @return */ public boolean existsHSet(String key, String field) { if (StringUtils.isEmpty(key)) { return false; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.hexists(key, field); } catch (Exception ex) { logger.error("delHSet error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return false; } /** * 返回 Hash 集中所有字段的value值 * @param key * @return */ public List<String> hvals(String key) { if (StringUtils.isEmpty(key)) { return null; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.hvals(key); } catch (Exception ex) { logger.error("hvals error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return null; } /** * 返回 Hash 集中所有字段的key值 * @param domain * @return */ public Set<String> hkeys(String key) { if (StringUtils.isEmpty(key)) { return null; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.hkeys(key); } catch (Exception ex) { logger.error("hkeys error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return null; } /** * 返回 Hash 中字段值总数 * @param key * @return */ public long lenHset(String key) { if (StringUtils.isEmpty(key)) { return -1; } Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.hlen(key); } catch (Exception ex) { logger.error("lenHset error.", ex); returnJedis(jedis); } finally { returnJedis(jedis); } return -1; } }