前言
为了方便讲解,模拟一个需要使用Redis缓存的场景,比如:一款APP的首页,由于其需要加载的数据量较大,于是决定把首页的部分数据使用Redis进行缓存,举例:比如要缓存首页的文章列表(ArticleList)模块。
使用@Cacheable注解实现Redis缓存
直接操作Redis比较麻烦,集合Spring本身的缓存机制会非常地方便。
@Cacheable是spring自带的缓存注解,因为其支持Redis缓存,所以我们来看下是怎么实现的。
1)首先
要开启Spring的缓存功能。
// 使用注解
@EnableCaching
此注解可以加到Redis配置类里面。
@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) {
}