✅P168_SpringCache-整合-体验@SpringCache

gong_yz大约 2 分钟谷粒商城

SpringCache-整合&体验

引入依赖

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

写配置

自动配置:

  • CacheAutoConfiguration 会导入 RedisCacheConfiguration;
  • 会自动装配缓存管理器 RedisCacheManager;

手动配置:

cfmall-product/src/main/resources/application.yml

spring
  cache:
    type: redis	# 使用redis作为缓存

测试使用缓存

开启缓存功能

启动类CfmallProductApplication上添加@EnableCaching注解

方法添加@Cacheable注解

为需要使用缓存功能的方法添加@Cacheable({"category"})注解,并指定分区(最好按照业务进行分区)

代表当前方法的结果需要缓存。如果缓存中有,方法不用调用。如果缓存中没有,会调用方法,最后将方法的结果放入缓存。

@Cacheable(value = {"category"})
@Override
public List<CategoryEntity> listCategory() {
    System.out.println("listCategory......从数据库查询一级类目");
    List<CategoryEntity> categoryEntityList = this.baseMapper.selectList(new QueryWrapper<CategoryEntity>().eq("parent_cid", 0));
    return categoryEntityList;
}

测试结果

多次访问:http://localhost:8200/open in new window

发现只打印了一次"listCategory......从数据库查询一级类目",有了缓存之后都能缓存中获取数据了

默认的key为:category::SimpleKey [];过期时间为-1,永久有效


总结

  1. 每一个需要缓存的数据我们都来指定要放到那个名字的缓存。【缓存的分区(按照业务类型分)】
  2. @Cacheable({"category"}):代表当前方法的结果需要缓存,如果缓存中有,方法都不用调用,如果缓存中没有,会调用方法。最后将方法的结果放入缓存
  3. 默认行为
  • 如果缓存中有,方法不再调用
  • key是默认生成的缓存的名字:category::SimpleKey []
  • 缓存的value值,默认使用jdk序列化机制,将序列化的数据存到redis中
  • 默认过期时间-1,永不过期