redis + springboot实现页面数据的缓存

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实战做缓存功能的小伙伴,希望可以帮助到你们

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值