前言
为了方便讲解,模拟一个需要使用Redis缓存的场景,比如:一款APP的首页,由于其需要加载的数据量较大,于是决定把首页的部分数据使用Redis进行缓存,举例:比如要缓存首页的文章列表(ArticleList)模块。
使用@Cacheable注解实现Redis缓存
直接操作Redis比较麻烦,集合Spring本身的缓存机制会非常地方便。
@Cacheable是spring自带的缓存注解,因为其支持Redis缓存,所以我们来看下是怎么实现的。
1)首先
要开启Spring的缓存功能。
// 使用注解
@EnableCaching
此注解可以加到Redis配置类里面。
@Configuration
@EnableCaching
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {// 配置redisTemplateRedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
2)其次
在文章列表的实现类里面加上@Cacheable注解。
实现类为:ArticleServiceImpl.java
// value :缓存组件的名字// key :缓存使用的 key// unless :否定缓存,可以通过 #result 进行判断@Cacheable(value = "home:article", key ="'new'", unless = "#result==null")@Overridepublic 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)@Overridepublic void saveArticle(Article article) {}