5.2.3 基于API的Redis缓存实现


在Spring Boot整合Redis缓存实现中,除了基于注解形式的Redis缓存实现外,还有一种开发中常用的方式——基于API的Redis缓存实现。这种基于API的Redis缓存实现,需要在某种业务需求下通过Redis提供的API调用相关方法实现数据缓存管理;同时,这种方法还可以手动管理缓存的有效期。

下面,通过Redis API的方式讲解Spring
Boot整合Redis缓存的具体实现


(1)使用Redis API进行业务数据缓存管理。在com.lagou.service包下编写一个进行业务处理的类ApiCommentService


@Service

public class ApiCommentService {

 

   
@Autowired

    private
CommentRepository commentRepository;

 

   
@Autowired

   
private RedisTemplate redisTemplate;

 

   
public Comment findCommentById(Integer id){

 

       
Object o = redisTemplate.opsForValue().get("comment_" + id);

       
if(o!=null){

           
return (Comment) o;

       
}else {

           
//缓存中没有,从数据库查询

           
Optional<Comment> byId = commentRepository.findById(id);

           
if(byId.isPresent()){

                Comment comment = byId.get();

                //将查询结果存入到缓存中,并设置有效期为1天

               
redisTemplate.opsForValue().set("comment_"+id,comment,1,TimeUnit.DAYS);

                return comment;

           
}else {

                return  null;

           
}

       
}

 

    }

 

   
public Comment updateComment(Comment comment) {

       
commentRepository.updateComment(comment.getAuthor(), comment.getaId());

       
//更新数据后进行缓存更新

       
redisTemplate.opsForValue().set("comment_"+comment.getId(),comment);

       
return comment;

    }

 

   
public void deleteComment(int comment_id) {

 

       
commentRepository.deleteById(comment_id);

       
redisTemplate.delete("comment_"+comment_id);

    }

(2)编写Web访问层Controller文件


@RestController

@RequestMapping("api") //窄化请求路径

public class ApiCommentController {

 

   
@Autowired

   
private ApiCommentService commentService;

 

   
@RequestMapping(value = "/findCommentById")

   
public Comment findCommentById(Integer id){

       
Comment comment = commentService.findCommentById(id);

 

       
return comment;

    }

 

   
@RequestMapping(value = "/updateComment")

   
public void updateComment(Comment comment){

       
Comment comment2 = commentService.findCommentById(comment.getId());

       
comment.setAuthor(comment.getAuthor());

 

       
commentService.updateComment(comment);

 

    }

 

   
@RequestMapping(value = "/deleteComment")

   
public void deleteComment(int id){

       
commentService.deleteComment(id);

 

    }

 

}
  • 基于API的Redis缓存实现的相关配置。基于API的Redis缓存实现不需要@EnableCaching注解开启基于注解的缓存支持,所以这里可以选择将添加在项目启动类上的@EnableCaching进行删除或者注释。

上了拉勾教育的《Java工程师高薪训练营》,做一下笔记。希望拉勾能给我推到想去的公司,目标:字节!!


目标字节的秃秃
4 声望0 粉丝