springboot结合redis实现缓存策略

svbadmin学习日志

本学习日志是使用Springboot和Vue来搭建的后台管理系统:
演示地址:http://118.31.68.110:8081/index.html
账号:root
密码:123
所有代码可以在gitbub上找到,切换到相应分支即可。【代码传送门】

正篇

第一节 spring boot 模块化构建项目
第二节 整合mybatisplus完成用户增删改查
第三节 整合springsecurity实现基于RBAC的用户登录
第四节 springsecurity结合jwt实现前后端分离开发
第五节 使用ResponseBodyAdvice格式化接口输出
第六节 springboot结合redis实现缓存策略
第七节 springboot结合rabbitmq实现队列消息
第八节 springboot结合rabbitmq实现异步邮件发送
第九节 利用springboot的aop实现行为日志管理
第十节 利用Quartz实现数据库定时备份
第十一节 springboot配置log输出到本地文件
第十二节 使用flyway对数据库进行版本管理
第十三节 springboot配合VbenAdmin实现前端登录
第十四节 springboot配合VbenAdmin实现用户CURD
第十五节 基于RBAC的权限管理VbenAdmin前端实现
第十六节 springboot 打包vue代码实现前后端统一部署

番外

2.1 数据库设计原则
3.1 配置apifox自动获取登录的token
13.1 springboot 全局捕捉filter中的异常
14.1 springsecurity整合mybatisplus出现isEnable的问题和解决方案


前言

缓存是必不可少的,java对缓存的支持比其他语言会方便不少,由于Ehcache不够直观,这里采用redis作为缓存服务器。


一、打印sql

先打印下当前在执行的sql,协助判断是否实现缓存了。在application.properties中加入配置

# 控制台输出sql
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

测试请求用户列表接口,因为之前我们设定了RBAC的权限结构,所以每次请求都会去判断权限点,这里每次都会调用 permissionService.getAllPermissions()。如下:
springboot结合redis实现缓存策略_第1张图片
一般来说权限点是不会经常变更,除非系统加入了新的功能。那么这里我们就可以对这个菜单进行缓存了。

二、加入redis缓存

1.加入依赖

在admin-service 中加入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

2. 加入@EnableCaching

在AdminWebApplication 加入注解@EnableCaching

3.加入@Cacheable(key = “#root.methodName”)

在需要缓存的类上加入@CacheConfig,在需要缓存的方法上加入@Cacheable注解

@CacheConfig(cacheNames = "permission_cache")
public interface PermissionService extends IService<Permission> {
    @Cacheable(key = "#root.methodName")
    public List<Permission> getAllPermissions();
}

三 测试

第一次访问用户列表接口后,得到sql打印的同时,redis中也得到了数据

springboot结合redis实现缓存策略_第2张图片
不过这里的缓存不可读,后期再研究下。

第二次请求的时候,你会发现sql打印已经没有了,说明第二次请求走的是缓存。


总结

  1. 缓存是很必要的,如果全交给数据库,在生产系统你会发现你的内存会不够用。而交给缓存后,内存就得到了释放。
  2. 这种直接缓存整个方法的返回的缓存思路,我觉得java还是做的比较有意思的。之前写php的时候一般会监听整个数据库表的变化,然后生成缓存。

问题

  1. Permission和Role类需要可序列化,不然会报错
  2. 缓存的类也要加@CacheConfig注解

代码地址

代码


参考文档:

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