package com.lanhai.chronicd.common.util; import java.util.List; import java.util.Map; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; /** * 缓存工具类 * * @author liqianxi */ public class RedisUtil { /** * 从缓存获取满足指定模式的Key * @param jedisPool * @param pattern 查询KEY的模式 * @return 缓存Key */ public static Set<String> keys(JedisPool jedisPool, String pattern) { if (jedisPool == null || pattern == null) { return null; } Jedis jedis = null; Set<String> keySet; try { jedis = jedisPool.getResource(); keySet = jedis.keys(pattern); } finally { if (jedis != null) { jedis.close(); } } return keySet; } /** * 从缓存获取数据 * @param jedisPool * @param key 缓存KEY * @return 缓存数据 */ public static String getSingleStringDataFromCache(JedisPool jedisPool, String key) { if (jedisPool == null || key == null) { return null; } Jedis jedis = null; String data; try { jedis = jedisPool.getResource(); data = jedis.get(key); } finally { if (jedis != null) { jedis.close(); } } return data; } /** * 从缓存获取多个数据 * @param jedisPool * @param keys 缓存KEY数组 * @return 缓存数据 */ public static List<String> getMultiStringDataFromCache(JedisPool jedisPool, String... keys) { if (jedisPool == null || keys == null || keys.length == 0) { return null; } Jedis jedis = null; List<String> data; try { jedis = jedisPool.getResource(); data = jedis.mget(keys); } finally { if (jedis != null) { jedis.close(); } } return data; } /** * 向缓存设定数据 * @param jedisPool * @param key 缓存KEY * @param value 缓存值 * @param time 过期时间(秒) * @return 缓存数据 */ public static void setSingleStringDataToCache(JedisPool jedisPool, String key, String value, int time) { if (jedisPool == null || key == null) { return; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 jedis.set(key, value); if (time > 0) { // 过期时间 jedis.expire(key, time); } } finally { if (jedis != null) { jedis.close(); } } } /** * 向缓存设定数据 * @param jedisPool * @param key 缓存KEY * @param value 缓存值 * @param time 过期时间(秒) * @return 缓存数据 */ public static void setSingleStringDataToCacheNx(JedisPool jedisPool, String key, String value, int time) { if (jedisPool == null || key == null) { return; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 jedis.setnx(key, value); if (time > 0) { // 过期时间 jedis.expire(key, time); } } finally { if (jedis != null) { jedis.close(); } } } /** * 向缓存设定多个数据 * @param jedisPool * @param keyValues 缓存KEY,VALUE数组 * @param time 过期时间(秒) * @return 缓存数据 */ public static void setMultiStringDataToCache(JedisPool jedisPool, String[] keyValues, int time) { if (jedisPool == null || keyValues == null) { return; } int length = keyValues.length; if (length == 0 || length % 2 != 0) { return; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 jedis.mset(keyValues); if (time > 0) { for (int i = 0; i < length;) { // 过期时间 jedis.expire(keyValues[i], time); i += 2; } } } finally { if (jedis != null) { jedis.close(); } } } /** * 删除缓存Key * @param jedisPool * @param keys 缓存Keys */ public static long del(JedisPool jedisPool, String... keys) { if (jedisPool == null || keys == null) { return 0; } int length = keys.length; if (length == 0) { return 0; } Jedis jedis = null; long result; try { jedis = jedisPool.getResource(); result = jedis.del(keys); } finally { if (jedis != null) { jedis.close(); } } return result; } /** * 缓存数据增加指定值 * @param key 缓存KEY * @return 增加指定值后的值 */ public static long incrByIncrement(JedisPool jedisPool, String key, int increment) { if (jedisPool == null || key == null) { return 0; } if (increment <= 0) { return 0; } Jedis jedis = null; long data = 0; try { jedis = jedisPool.getResource(); data = jedis.incrBy(key, increment); } finally { if (jedis != null) { jedis.close(); } } return data; } /** * 缓存数据加1 * @param key 缓存KEY * @return 缓存数据加1的值 */ public static long incr(JedisPool jedisPool, String key) { return incrByIncrement(jedisPool, key, 1); } /** * Set中添加元素 * @param jedisPool * @param key * @param members * @return */ public static long saddJedis(JedisPool jedisPool, String key, String... members) { if (jedisPool == null || key == null) { return 0; } Jedis jedis = null; long data = 0; try { jedis = jedisPool.getResource(); data = jedis.sadd(key, members); } finally { if (jedis != null) { jedis.close(); } } return data; } /** * Set中的值 * @param jedisPool * @param key * @return */ public static Set<String> smembersJedis(JedisPool jedisPool, String key) { if (jedisPool == null || key == null) { return null; } Jedis jedis = null; Set<String> data = null; try { jedis = jedisPool.getResource(); data = jedis.smembers(key); } finally { if (jedis != null) { jedis.close(); } } return data; } /** * Set中删除元素 * @param jedisPool * @param key * @param members * @return */ public static long sremJedis(JedisPool jedisPool, String key, String... members) { if (jedisPool == null || key == null) { return 0; } Jedis jedis = null; long data = 0; try { jedis = jedisPool.getResource(); data = jedis.srem(key, members); } finally { if (jedis != null) { jedis.close(); } } return data; } /** * Set中是否已存在 * @param jedisPool * @param key * @param members * @return */ public static boolean sismemberJedis(JedisPool jedisPool, String key, String members) { if (jedisPool == null || key == null) { return false; } Jedis jedis = null; boolean data = false; try { jedis = jedisPool.getResource(); data = jedis.sismember(key, members); } finally { if (jedis != null) { jedis.close(); } } return data; } /** * 设定Hash * @param jedisPool * @param key 缓存KEY * @param hash 值 * @param time 缓存时间(秒级) */ public static void hmset(JedisPool jedisPool, String key, Map<String, String> hash, int time) { if (jedisPool == null || key == null) { return; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 jedis.hmset(key, hash); if (time > 0) { // 过期时间 jedis.expire(key, time); } } finally { if (jedis != null) { jedis.close(); } } } /** * 设定Hash指定域 * @param jedisPool * @param key 缓存KEY * @param field * @param value 值 */ public static long hset(JedisPool jedisPool, String key, String field, String value) { long result = -1; if (jedisPool == null || key == null) { return result; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 result = jedis.hset(key, field, value); } finally { if (jedis != null) { jedis.close(); } } return result; } /** * 设定Hash指定域 * @param jedisPool * @param key 缓存KEY * @param field * @param value 值 */ public static long hsetnx(JedisPool jedisPool, String key, String field, String value) { long result = -1; if (jedisPool == null || key == null) { return result; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 result = jedis.hsetnx(key, field, value); } finally { if (jedis != null) { jedis.close(); } } return result; } /** * 设定Hash指定域 * @param jedisPool * @param key 缓存KEY * @param field */ public static boolean hexists(JedisPool jedisPool, String key, String field) { boolean result = false; if (jedisPool == null || key == null) { return result; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 result = jedis.hexists(key, field); } finally { if (jedis != null) { jedis.close(); } } return result; } /** * 设定Hash指定域 * @param jedisPool * @param key 缓存KEY * @param fields */ public static long hdel(JedisPool jedisPool, String key, String... fields) { long result = -1; if (jedisPool == null || key == null) { return result; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 result = jedis.hdel(key, fields); } finally { if (jedis != null) { jedis.close(); } } return result; } /** * 获取Hash * @param jedisPool * @param key 缓存KEY */ public static Map<String, String> hgetAll(JedisPool jedisPool, String key) { Map<String, String> result = null; if (jedisPool == null || key == null) { return result; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 result = jedis.hgetAll(key); } finally { if (jedis != null) { jedis.close(); } } return result; } /** * 获取Hash * @param jedisPool * @param key 缓存KEY */ public static String hget(JedisPool jedisPool, String key, String field) { String result = null; if (jedisPool == null || key == null) { return result; } Jedis jedis = null; try { jedis = jedisPool.getResource(); // 设定新值 result = jedis.hget(key, field); if ("nil".equals(result)) { result = null; } } finally { if (jedis != null) { jedis.close(); } } return result; } }