[Spring Boot]11 使用@Cacheable注解实现Redis缓存

前言

为了方便讲解,模拟一个需要使用Redis缓存的场景,比如:一款APP的首页,由于其需要加载的数据量较大,于是决定把首页的部分数据使用Redis进行缓存,举例:比如要缓存首页的文章列表(ArticleList)模块。

使用@Cacheable注解实现Redis缓存

直接操作Redis比较麻烦,集合Spring本身的缓存机制会非常地方便。
@Cacheable是spring自带的缓存注解,因为其支持Redis缓存,所以我们来看下是怎么实现的。

1)首先

要开启Spring的缓存功能。

// 使用注解
@EnableCaching

此注解可以加到Redis配置类里面。
[Spring Boot]11 使用@Cacheable注解实现Redis缓存_第1张图片

@Configuration
@EnableCaching
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        // 配置redisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        

2)其次

在文章列表的实现类里面加上@Cacheable注解。
实现类为:ArticleServiceImpl.java

    // value :缓存组件的名字
    // key :缓存使用的 key
    // unless :否定缓存,可以通过 #result 进行判断
    @Cacheable(value = "home:article", key ="'new'", unless = "#result==null")
    @Override
    public List<ArticleListDTO> listArticle() {
        // 取数据库最新的文章数据
        return baseMapper.listArticle();
    }

首页接口直接对外提供此接口即可。

    @ApiOperation(value = "最新文章", notes = "列表")
    @PostMapping("/list")
    public ResponseEntity<List<ArticleListDTO>> listNewArticle() {
        return ResponseEntity.ok(articleService.listArticle());
    }

3)再次

有关缓存更新问题。
可以在Redis里面设置个过期时间进行清空,还有在后台系统对文章进行新增或者修改等操作时,进行缓存的清空。
清空方法为使用@CacheEvict注解:

    @CacheEvict(value = "home:article", allEntries = true)
    @Override
    public void saveArticle(Article article) {
    
    }

你可能感兴趣的:(Spring,Boot,redis,缓存,spring,boot,Cacheable)