首页 > 编程语言 > 详细

Spring Boot学习之缓存

时间:2021-01-22 22:42:03      阅读:28      评论:0      收藏:0      [点我收藏+]

Spring Boot学习之缓存


1.缓存的快速搭建

  1. maven依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.1</version>
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
  2. Springboot启动类上加上开启缓存注解@EnableCaching

  3. 在待缓存的service层方法上加上注解@Cacheable(cacheNames = {"emp"}),如下:

    @Cacheable(cacheNames = {"emp"})
    public Employee getEmp(Integer id) {
        System.out.println("查询" + id + "号员工");
        Employee employee = employeeMapper.selectById(id);
        return employee;
    }
    

@Cacheable共有以下属性:

  • cacheNames/value:指定缓存组件的名字

  • key:缓存数据使用的key;可以用它来指定.默认是使用方法参数的值 1.方法的返回值
    编写SpEL: #id;参数id的值 #a0 #p0 #root.args[0]

  • keyGenerator: key的生成器;可以自己指定key的生成器的组件id
    keykeyGenerator二选一使用即可

  • cacheManager:指定缓存管理器;或者cacheResolver指定获取解析器

  • condition:设定符合条件的情况下才缓存

  • unless:否定缓存,当unless指定的条件为true,方法的返回值就不会被缓存,可以获取到结果进行判断

  • sync:是否使用异步模式

2.@Cacheable注解详解

1.原理

  • 自动配置类:CacheAutoConfiguration
  • 缓存的配置类::
    org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
    org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration
    org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration
    org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration
    org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguratio
    org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration
    org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
    org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration
    org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration
    org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration
  • SimpleCacheConfiguration默认生效
  • 给容器中注册了一个CacheManager:ConcurrentMapCacheManager
  • 可以获取或者创建ConcurrentMapCacheManager类型的缓存组件,他的作用将数据保存在ConcurrentMap

2.运行流程

  1. 方法运行之前,先去查询Cache(缓存组件),按照cacheNames指定的名字获(CacheManager先获取相应的缓存),第一次获取缓存如果没有Cache组件就会自动创建
  2. 去Cache中查找缓存的内容,使用一个key,默认就是方法的参数;key是按照某种策略生成的;默认是使用keyGenerator生成的,默认使用SimpleKeyGenerator生成key
  3. 没有查到缓存就调用目标方法
  4. 将目标方法返回的结果,放进缓存中

3.总结

? 标注的方法执行之前先来检查缓存中有没有这个数据,默认按照参数的值作为key去查询缓存,如果没有就运行方法并将结果放入缓存,以后再来调用就可以直接使用缓存中的数据
? 核心在于:
? 1.使用CacheManager[ConcurrentMapCacheManager]按照名字得到Cache[ConcurrentMapCache]组件
? 2.key使用keyGenerator生成的,默认是SimpleKeyGenerator

Spring Boot学习之缓存

原文:https://www.cnblogs.com/toughtful/p/14315169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!