1、引入redis依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、yaml配置
spring:
redis:
port: 6379
host: xx.xx.xxx.xxx
3、创建RedisConfig配置文件
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object>
redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
/* 使用Json序列化,默认是JDK序列化 */
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
template.setDefaultSerializer(serializer);
return template;
}
}
4、被操作的实体类需要实现序列化接口(我也忘了,是不是必须的,但是我都是实现Serializable接口)
@Data
@TableName("t_type")
public class Type implements Serializable {
@TableId(value = "id",type = IdType.AUTO)
private Long id;
@NotBlank(message = "分类名称不能为空")
private String name;
@TableField(exist = false)
private Integer blogCount;
@TableField(exist = false)
private List<Blog> blogs;
}
5、controller层
@Controller
public class IndexController {
private static final Logger logger = LoggerFactory.getLogger(IndexController.class);
@Autowired
private TypeService typeService;
/**
* 首页展示
*/
@GetMapping("/")
public String index(Model model){
//首页显示博客类别,按照博客数量倒序排列
model.addAttribute("types",typeService.listTypeTop(6));
return "index";
}
}
6、service层
@Service
public class TypeServiceImpl implements TypeService {
private static final Logger logger = LoggerFactory.getLogger(BlogServiceImpl.class);
@Autowired
private TypeMapper typeMapper;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Override
public List<Type> listTypeTop(int size) {
//1、从缓存中查找数据
String listTypeTop = redisTemplate.opsForValue().get("listTypeTop");
//2、判断:redis缓存中是否存在数据
if (listTypeTop==null || listTypeTop.equals("") || listTypeTop.length()==0){
List<Type> typeList = typeMapper.listTypeTop(size);
logger.info("存入redis的数据:"+typeList);
//将集合数据转换成json数据
listTypeTop = JSON.toJSONString(typeList);
//将转换后的json数据放入缓存中
redisTemplate.opsForValue().set("listTypeTop", listTypeTop);
}
//因为要将数据赋给HTML页面,所以还要将从redis中取出来的json数据重新转化为Javabean形式的list集合数据,这样HTML页面才能接收到数据
List<Type> typeListByRedis = JSON.parseArray(listTypeTop,Type.class);
return typeListByRedis;
}
}
7、dao层(用的是mybatis-plus做的)
@Mapper
public interface TypeMapper extends BaseMapper<Type> {
List<Type> listTypeTop(@Param("size") int size);
}
8、TypeMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zyh.blog.dao.TypeMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.zyh.blog.entity.Type">
<id column="id" property="id" />
<result column="name" property="name" />
</resultMap>
<!-- 博客前台展示:通过分类名称查询出所有分类以及该分类下博客数量并以博客数量倒序排列 -->
<select id="listTypeTop" resultType="com.zyh.blog.entity.Type">
SELECT t.`id`,t.`name`,COUNT(b.`id`)blogCount FROM `t_type` t
LEFT JOIN `t_blog` b ON t.`id` = b.`type_id`
GROUP BY t.`name`
ORDER BY blogCount DESC LIMIT #{size}
</select>
</mapper>
9、访问页面之后,查看redis的key值
xx.xx.xxx.xxx:6379> keys *
1) "listTagTop"
2) "listTypeTop"
3) "listBlogByRecommendTop"
xx.xx.xxx.xxx:6379>
这是我在写一个博客项目时的一个例子,有不懂redis结合springboot实战做缓存功能的小伙伴,希望可以帮助到你们