springboot整合redis作为缓存
(一)新建工程,建立数据库及相关表,添加缓存注解
新建springboot工程时,选择I/O下的cache组件,就自动配置了cache依赖。
在MySQL中新建spring_cache数据库,并添加两张表:
项目中加入bean:
Mybatis操作数据库时,在mapper写入对部门和员工的增删改查语句,并在主程序设置mapperscan的地址(项目启动时会按照该路径扫描mapper):
项目层次结构
以下分别对应数据,控制和服务层:
总体层次架构
层级之间的关系原理:将服务层注入控制层,控制层处理网页交互的任务
将mapper接口注入服务层,为服务层的功能实现提供具体的增删改查方法
举例来说,mapper中employeeMapper接口语句如下:
@Select("SELECT * FROM employee WHERE id=#{id}")
public Employee getEmpById(Integer id);
@Update("UPDATE employee SET lastName=#{lastName},email=#{email},gender=#{gender},d_id=#{dId} WHERE id=#{id}")
public void updateEmp(Employee employee);
@Delete("DELECT FROM employee WHERE id=#{id}")
public void deleteEmpById(Integer id);
@Insert("INSERT INTO employee(lastName,email,gender,d_id) VALUES(#{lastName},#{email},#{gender},#{dId})")
public void insertEmployee(Employee employee);
@Select("SELECT * FROM employee WHERE lastName=#{lastName}")
public Employee getEmpByName(String lastName);
下面介绍通过注解的方式来使用缓存,对程序启动类加入@EnableCaching,service内部的方法上加入注解@Cacheable(cacheNames = {“emp”})
WARNING:缓存配置原理:
@cacheable注解的方法在执行前,先查询缓存,按照参数的值查询,若缓存中有,则返回缓存的数据,若没有,则调用方法,并将方法返回值存入缓存。
其中,cacheManager按照缓存名字得到cache组件,key使用可以generator来生成
几个注解
@cacheput,更新缓存,每次调用,将返回值放入缓存,用@cacheput做更新操作时,需要将key和查询时的key修改一致,才能保证在更新时使缓存中的数据关于指定ID被更新。由于cacheable有先查缓存的步骤,所以不能用result做key,可能还没有生成result,但put在方法执行之后,所以可以用result做key
@CacheEvict,清除缓存,其内置参数中:
allEntries:清楚所有缓存数据
beforeInvocation:默认false,方法正常结束之后才清除缓存,若方法有错误,则不清除缓存
@caching组合注解
@Caching(
cacheable = {
@Cacheable(value = "emp",key = "#lastName")
},
put ={//put在所注解的方法执行之后执行,所有有了result
@CachePut(value = "emp",key = "#result.id"),
@CachePut(value = "emp",key="#result.email")
}
)
public Employee getEmpByLastName(String lastName){
return employeeMapper.getEmpByName(lastName);
}
caching里面只要put,则一定会执行其注解的方法(本例为getEmpByLastName),用那么查询时一定会调用数据库。
也可以在@service上添加@cacheconfig全局注释,公共配置cache信息: