@Slf4j
@Component
public class RedisUtils {
@Resource
private RedisConfig redisConfig;
/**
* 根据db获取对应的redisTemplate实例
*
* @param db
* @return redisTemplate实例
*/
public RedisTemplate getRedisTemplateByDb(final int db) {
return redisConfig.setDataBase(db);
}
/**
* 设置缓存
*
* @param key 缓存key
* @param value 缓存value
*/
public void setString(String key, String value, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
redisTemplate.opsForValue().set(key, value);
Loger.debug("RedisUtil:set cache key={},value={}", key, value);
}
/**
* 设置缓存,并且自己指定过期时间
*
* @param key
* @param value
* @param expireTime 过期时间
*/
public void setString(String key, String value, int expireTime, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
redisTemplate.opsForValue().set(key, value, expireTime, TimeUnit.SECONDS);
Loger.debug("RedisUtil:set cache key={},value={}", key, value, expireTime, TimeUnit.SECONDS);
}
/**
* 设置缓存对象,可指定DB
*
* @param key 缓存key
* @param obj 缓存value
*/
public void setObject(String key, T obj, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
redisTemplate.opsForValue().set(key, obj);
}
/**
* 新增hashMap值
*
* @param key
* @param hashKey
* @param hashValue
* @param db
* @return void
* @author Xuyijieing
* @date 2019年10月26日 9:22
*/
public void hashPutString(Serializable key, Serializable hashKey, String hashValue, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
operations.put(key, hashKey, hashValue);
}
/**
* 以map集合的形式添加键值对
*
* @param key
* @param maps
* @param db
* @return void
* @author Sunhj
* @date 2019年10月26日 9:56
*/
public void hashPutAll(String key, Map maps, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
operations.putAll(key, maps);
}
/**
* 获取变量中的键值对
* {key3=value3, key1=value1, key5=value5, key4=value4, key2=value2}
*
* @param db
* @param key
* @return java.util.Map
* @author Xuyijie
* @date 2019年10月26日 8:47
*/
public Map hashGetAll(int db, Serializable key) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.opsForHash().entries(key);
}
/**
* 判断key是否存在
*
* @param key
* @param db
* @return java.util.Map
* @author Xuyijie
* @date 2019年10月26日 8:47
*/
public Boolean hashHasKey(Serializable key, Serializable hahsKey, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.opsForHash().hasKey(key, hahsKey);
}
/**
* 获取hash表中存在的所有的键
*
* @param key
* @param db
* @return java.util.List
* @author Sunhj
* @date 2019年10月26日 10:58
*/
public Set hashGetAllHashKeys(Serializable key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.opsForHash().keys(key);
}
/**
* 获取hash表中存在的所有的值
*
* @param key
* @param db
* @return java.util.List
* @author Sunhj
* @date 2019年10月26日 10:58
*/
public List hashGetAllHashValues(Serializable key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.opsForHash().values(key);
}
/**
* 根据key,hashKey
* 获取hash表中存在的单个值
*
* @param key
* @param db
* @return java.util.List
* @author Sunhj
* @date 2019年10月26日 10:58
*/
public Object hashGetObject(Serializable key, Serializable hashKey, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.opsForHash().get(key, hashKey);
}
/**
* 删除一个或者多个hash表字段
*
* @param key
* @param db
* @param fields
* @return java.lang.Long
* @author Sunhj
* @date 2019年10月26日 10:15
*/
public Long hashDelete(Serializable key, int db, Serializable... fields) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
return operations.delete(key, (Object) fields);
}
/**
* 删除一个hash表字段
*
* @param key
* @param db
* @param fields
* @return java.lang.Long
* @author Sunhj
* @date 2019年10月26日 10:15
*/
public boolean hashDeleteOne(Serializable key, String fields, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
return operations.delete(key, fields) == 1;
}
/**
* 设置缓存对象
*
* @param key 缓存key
* @param obj 缓存value
*/
public void setObject(String key, T obj, int expireTime, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
redisTemplate.opsForValue().set(key, obj, expireTime, TimeUnit.SECONDS);
}
/**
* 获取指定key的缓存
*
* @param key---JSON.parseObject(value, User.class);
*/
public Object getObject(String key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.opsForValue().get(key);
}
/**
* 获取指定key的缓存
*
* @param key---JSON.parseObject(value, User.class);
*/
public Object getKeys(String key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.opsForValue().getOperations().keys(key);
}
/**
* 判断当前key值 是否存在
*
* @param key
*/
public boolean hasKey(String key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.hasKey(key);
}
/**
* 获取指定key的缓存
*
* @param key
*/
public String getString(String key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
String value = (String) redisTemplate.opsForValue().get(key);
Loger.debug("RedisUtil:get cache key={},value={}", key, value);
return value;
}
/**
* 删除指定key的缓存
*
* @param key
*/
public boolean delete(String key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
return redisTemplate.delete(key);
}
/**
* @param key
* @throws
* @Title: expire
* @Description: 更新key的失效时间
*/
public Boolean expire(String key, int seconds, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
Loger.debug("RedisUtil:expire cache key={}", key);
return redisTemplate.expire(key, seconds, TimeUnit.SECONDS);
}
/**
* 移除并获取列表中第一个元素
*
* @param key
* @param db
* @return void
* @author sunhj
* @date 2019年10月26日 14:35
*/
public String listLeftPop(Serializable key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
Object leftPop = redisTemplate.opsForList().leftPop(key);
if (leftPop == null) {
return null;
}
return JSON.toJSONString(leftPop);
}
/**
* 移除并获取列表最后一个元素
*
* @param key
* @param db
* @return java.lang.Object
* @author sunhj
* @date 2019年10月26日 14:40
*/
public String listRightPop(Serializable key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
ListOperations operations = redisTemplate.opsForList();
Object x = operations.rightPop(key);
if (x == null) {
return null;
}
return JSON.toJSONString(x);
}
/**
* 获取变量中的指定map键是否有值,如果存在该map键则获取值,没有则返回null。
*
* @param key
* @param field
* @param db
* @return T
* @author Sunhj
* @date 2019年10月26日 8:41
*/
public T hashGet(Serializable key, Serializable field, Class t, int db) {
try {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
//String x = Objects.requireNonNull(operations.get(key, field)).toString();
//T y = JSON.parseObject(Objects.requireNonNull(operations.get(key, field)).toString(), t);
//T y = JSON.parseObject(x , t);
return JSON.parseObject(Objects.requireNonNull(operations.get(key, field)).toString(), t);
} catch (Exception e) {
return null;
}
}
/**
* 获取变量中的指定map键是否有值,如果存在该map键则获取值(String格式),没有则返回null。
*
* @param key
* @param field
* @param db
* @return T
* @author Sunhj
* @date 2019年10月26日 8:41
*/
public String hashGetString(Serializable key, Serializable field, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
try {
Serializable serializable = operations.get(key, field);
if (serializable != null) {
return serializable.toString();
}
return null;
} catch (Exception e) {
Loger.error("hashGetString方法异常", e);
return null;
}
}
/**
* 获取变量中的键值对 ??
*
* @param key
* @param db
* @return java.util.Map
* @author Sunhj
* @date 2019年10月26日 8:47
*/
public Map hashGetAll(Serializable key, Class t, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
Map x = operations.entries(key);
Map map = new HashMap<>();
try {
for (Serializable xa : x.keySet()) {
String keyValue = x.get(xa).toString();
map.put(xa.toString(), JSON.parseObject(keyValue, t));
}
return map;
} catch (Exception e) {
return null;
}
}
/**
* 新增hashMap值
*
* @param key
* @param hashKey
* @param hashValue
* @param db
* @return void
* @author Sunhj
* @date 2019年10月26日 9:22
*/
public boolean hashPut(Serializable key, Serializable hashKey, T hashValue, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
operations.put(key, hashKey, JSON.toJSONString(hashValue, SerializerFeature.WriteMapNullValue));
return true;
}
/**
* 查看hash表中指定字段是否存在
*
* @param key
* @param field
* @param db
* @return boolean
* @author Sunhj
* @date 2019年10月26日 10:32
*/
public boolean hashExists(Serializable key, Serializable field, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
HashOperations operations = redisTemplate.opsForHash();
return operations.hasKey(key, field);
}
/**
* 存储在list的头部,即添加一个就把它放在最前面的索引处
*
* @param key
* @param value
* @param db
* @return java.lang.Long
* @author sunhj
* @date 2019年10月26日 14:03
*/
public Long listLeftPush(Serializable key, Serializable value, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
ListOperations operations = redisTemplate.opsForList();
return operations.leftPush(key, value);
}
/**
* 获取所有的KEY
*
* @param key
*/
public List getHashKeys(String key, int db) {
RedisTemplate redisTemplate = getRedisTemplateByDb(db);
List values = redisTemplate.opsForHash().values(key);
return values;
}
}