Redis是时下最流行的NoSql数据库,可以用来作为数据库,消息中间件,缓存。而使用最广泛的还是用Redis做缓存。日常学习的话最好在本地安装Redis服务器,不会安装的小伙伴请参考这篇博客:Windows下搭建Redis服务器。
这两个工具类是现在的项目中用到的,已经封装好了,因为是通用的,所以贴出来跟大家分享一下。
1.CacheFetchUtils增强工具类
package com.csdn.myboot.utils;
import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
import java.util.List;
import java.util.function.Supplier;
/**
* @author haozz
* @date 2018/5/29 15:29
* @description
*/
public class CacheFetchUtils {
private static final Logger logger= LoggerFactory.getLogger(CacheFetchUtils.class);
public CacheFetchUtils() {
}
public static <T> T fromRedis(RedisOperations redisOperations, String redisKey, Class<T> clazz, Supplier<T> dbFunc, Object... object) {
T result = redisOperations.getVal(redisKey, clazz);
if(result == null) {
result = dbFunc.get();
if(result == null) {
logger.error("fetch " + clazz + " error, redisKey: " + redisKey);
return null;
}
valSerialize(redisOperations,redisKey,result,object);
}
return result;
}
public static <T> List<T> fromRedisList(RedisOperations redisOperations, String redisKey, Class<T> clazz, Supplier<List> dbFunc,Object... object) {
List<T> result = JSON.parseArray(redisOperations.getVal(redisKey),clazz);
if(CollectionUtils.isEmpty(result)) {
result = dbFunc.get();
if(result == null) {
logger.error("fetch " + clazz + " error, redisKey: " + redisKey);
return null;
}
valSerialize(redisOperations,redisKey,result,object);
}
return result;
}
private static void valSerialize(RedisOperations redisOperations,String redisKey, Object result,Object... object){
Object[] objects= object;
i