1.redis工具类编写
package cn.x.x.config;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
//它是一个组件,由spring帮助创建
@Component
public class RedisService {
@Autowired //在spring-data-redis的jar中,提供一个封装好的redis的操作模板,这个模板中封装了关于redis操作的工具方法
private StringRedisTemplate stringRedisTemplate;
/**
* 向Redis中存储 key-value键值对数据,value的类型为object
*
* @param key
* @param value
*/
public void setStringKeyAndValue(String key, Object value) {
stringRedisTemplate.opsForValue().set(key, JSONObject.toJSONString(value));
}
/**
* 保存key-value键值对到 redis,存储的value是字符串类型
*
* @param key
* @param value
*/
public void setStringKeyAndValue(String key, String value) {
stringRedisTemplate.opsForValue().set(key, value);
}
/**
* 存储的数据,多了一个 有效时间
*
* @param key
* @param value
* @param minute
*/
public void setStringKeyAndValue(String key, Object value, long minute) {
stringRedisTemplate.opsForValue().set(key, JSONObject.toJSONString(value), minute, TimeUnit.MINUTES);
}
public void setStringKeyAndValue(String key, String value, long minute) {
stringRedisTemplate.opsForValue().set(key, value, minute, TimeUnit.MINUTES);
}
/**
* 功能说明 取出对象并转换为对象类型
*
* @param key
* @param clazz
* @return T
* @author caiwen
* @date 2020/8/22
*/
public <T> T getKeyObjectValue(String key, Class<T> clazz) {//传入的这个数据类型,可能是2种类型:1string; 2object,如果是object,要进行泛型转换
T t = null;
String s = stringRedisTemplate.opsForValue().get(key);
if (StringUtils.isBlank(s)) {
return null;
}
//下面这个判断,是判断传入的Class类型是什么
if (StringUtils.equalsIgnoreCase(clazz.getName(), "java.lang.string")) {
t = (T) s;
} else if (StringUtils.isNotBlank(s)) {
t = JSONObject.parseObject(s, clazz);
}
return t;
}
public void deleteRedisByKey(String key) {
stringRedisTemplate.delete(key);
}
}
注意:此处JSON的依赖是
import com.alibaba.fastjson.JSONObject;
<!-- 引入fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
2.项目中使用
①导入依赖
<!-- 缓存redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 引入fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
②代码实现
package cn.x.x.service.impl;
import cn.x.th.config.RedisContants;
import cn.x.th.config.RedisService;
import cn.itsource.th.domain.CourseType;
import cn.itsource.th.mapper.CourseTypeMapper;
import cn.itsource.th.service.ICourseTypeService;
import cn.itsource.th.util.AjaxResult;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 课程目录 服务实现类
* </p>
*
* @author huan
* @since 2021-01-14
*/
@Service
public class CourseTypeServiceImpl extends ServiceImpl<CourseTypeMapper, CourseType> implements ICourseTypeService {
@Autowired
private RedisService redisService;
@Override
public AjaxResult treeData() {
List<CourseType> courseTypes=null;
//思路:判断courseTypes在Redis里是否为空,如果为空则在数据库查询,在存到Redis里,
// 如果不为空,则直接在Redis查询出来,转换成对象集合返回
//1.查询Redis里的数据,以string类型返回
String keyObjectValue = redisService.getKeyObjectValue(RedisContants.REDIS_KEY_COURSE_TYPE, String.class);
if(StringUtils.isBlank(keyObjectValue)){//如果为空,则代表Redis里没有
//从数据库中查询出来
courseTypes = baseMapper.selectForTreeData();
//将数据存到Redis里
redisService.setStringKeyAndValue(RedisContants.REDIS_KEY_COURSE_TYPE,courseTypes);
}else {//如果不为空,则代表Redis里有数据,则直接查询出来,但由于Redis里存的是json格式,所以需要转换
courseTypes = JSON.parseArray(keyObjectValue, CourseType.class);
}
return AjaxResult.me().setResultObj(courseTypes);
}
}
3.用到的常量
package cn.x.x.config;
//定义系统中所有使用到 redis缓存的 key的名称
public interface RedisContants {
String REDIS_KEY_COURSE_TYPE = "redis_key_course_type";
}