Spring Boot 学习笔记——缓存篇

缓存可以提高系统的访问速度,提升系统的性能

JSR-107

Java Caching 定义了5个核心接口

  • CachingProvider:管理和控制着多个CacheManager
  • CacheManager:管理和控制多个唯一命名的Cache
  • Cache:缓存组件,类似Map有key作为索引
  • Entry:Cache中的value值
  • Expiry:Cache的有效期限
    结构图

Spring缓存抽象

保留了CacheManagerCache

注解说明
@Cacheable可根据方法的参数对返回结果进行缓存
@CacheEvict清空缓存
@CachePut更新缓存
@EnableCaching开启基于注解的缓存

实际操作

环境搭建

未完整说明

  • 使用idea的spring initialize创建项目选择 Cache,Mysql,Mabatis 和 Web 模块
  • 创建数据库以及表
  • 创建数据库表对应的实体类
  • 配置 application.propreties,注意url中要添加时区 serverTimezone=UTC,驱动可省略不写。
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • 使用的是Mabatis所以在主程序中用 @MapperScan() 注解,括号中的value值说明要扫描的mapper接口所在的包的全类名
  • 创建mapper包,用 @Mapper 注解对应创建实体类的mapper接口,方法上使用 @Select,@Update,@Insert,@Delete 注解
  • 创建Service和Controller层分别使用 @Service 和 @Controller 注解
  • 编写对应代码并测试

测试缓存

  1. 主程序加上 @EnableCaching 开启缓存
  2. Service对应方法上加上 @Cacheable

@Cacheable中对应的属性:

  • cacheNames/value:指定缓存的名字
  • key:缓存数据使用的索引,默认使用方法的参数作为值。可以使用SpEL表达式,如*#root.args[0]*指定key的值
  • keyGenerator:key的生成器,可以指定生成器。与key二选一使用。在使用keyGenerator时可以自定义一个keyGenerator来替换SpringBoot中默认使用的keyGenerator
@Configuration
public class MyKeyGenerator implements KeyGenerator{
    @Override
    public Object generate(Object o, Method method, Object... objects) {
        return 1;   //生成的key的值
    }
}
  • cacheManager:指定缓存管理器
  • condition:符合条件的情况下进行缓存(使用SpEL表达式)
  • unless:符合条件不进行缓存,可获得方法返回结果判断(使用SpEL表达式)
  1. 更新缓存 @CachePut,要注意的是在使用 @CachePut 注解时,是先执行方法在获得key的值,而 @Cacheable 是先获得key的值。另外要保证 @CachePut 和 @Cacheable 的key值相等,才能同步更新缓存
  2. 删除缓存 @CacheEvict 中的属性
  • allEntries:等于true时删除所有缓存
  • beforeInvocation:等于true时,在方法执行之前删除所有缓存,避免了方法中出现异常而导致缓存没有删除
  1. @Caching 可以制定复杂的缓存规则,包括了 @Cacheable、@CachePut 和 @CacheEvict 的功能
  2. @CacheConfig 在类上标注,指定全局缓存规则

整合Redis

1、导入依赖

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

2、配置连接

spring.redis.host=127.0.0.1
spring.redis.port=6379

3、自定义RedisTemplateRedisUtil

  • RedisTemplate 主要实现序列化的功能
  • RedisUtil 封装,集成了对redis的原生操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值