Spring Boot开发实战(第14章 Spring Boot缓存)

目录

14.1 Spring Cache简介

14.2 Cache注解

14.2.1 @Cacheable

14.2.2 @CachePut

14.2.3 @CacheEvict

14.2.4 @Caching

14.3 项目实战


一个系统的瓶颈通常发生在与数据库交互的过程中。内存速度远远快于硬盘速度。

14.1 Spring Cache简介

    spring-context包中定义了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口用来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口,Cache接口包含缓存的操作:增加、删除、读取等。
    针对不同缓存技术,需要实现不同的CacheManager。

                                                                      Spring支持的常用CacheManager

CacheManager

描述

SimpleCacheManager

使用简单的Collection来存储缓存

ConcurrentMapCacheManager

使用java.util.concurrent.Concurrent.ConcurrentHashMap实现的Cache

NoOpCacheManager

仅测试用,不会实际存储缓存

EhCacheCacheManager

集成使用EhCache缓存技术。EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider,也是Java领域应用最为广泛的缓存

JCacheCacheManager

支持JCache(JSR-107)标准的实现作为缓存技术,如Apache Commons JCS

CaffeineCacheManager

使用Caffeine作为缓存技术。Caffeine是使用Java 8对Guava缓存的重写版本,在Spring Boot 2.0中将取代Guava。如果出现Caffeine,CaffeineCacheManager将会自动配置。使用spring.cache.cache-names属性可以在启动时创建缓存

CompositeCacheManager

用于组合CacheManager,即可以从多个CacheManager中轮询得到相应的缓存

    Spring Cache使用的核心思想:当调用一个缓存方法时,会把该方法的参数和返回结果作为一个键值对存在缓存中,当下次使用该方法时,直接调用缓存而不是调用方法。

14.2 Cache注解

14.2.1 @Cacheable

 1.使用:针对方法配置。缓存存在,直接读取缓存值;缓存不存在,调用方法
 2.属性
  1)value:缓存名(必填)
  2)key:可使用SPEL标签自定义缓存key(可选)
  3)condition:指定发生条件(可选)

14.2.2 @CachePut

 1.使用:针对方法配置,根据方法的请求参数对结果进行缓存,会触发真实方法调用
 2.属性
  1)value:缓存名(必填)
  2)key:可使用SPEL标签自定义缓存key(可选)

14.2.3 @CacheEvict

 1.使用:针对方法配置,根据一定条件清空对应缓存
 2.属性
  1)value:缓存名(必填)
  2)key:可使用SPEL标签自定义缓存key(可选)
  3)condition:指定缓存条件(可选)
  4)allEntries:是否清空所有缓存(可选,默认为false)
  5)beforeInvocation:是否在方法执行前清空(可选,默认false,当执行发生异常时则不清空) 

14.2.4 @Caching

 1.使用:组合使用其他注解,可组合相同注解,也可组合不同注解
 2.例子:@Caching(evict={@CacheEvict("u1"),@CacheEvict("u2",allEntries=true)})

14.3 项目实战

 1.创建项目
 2.添加依赖
     dependencies {
        compile('org.springframework.boot:spring-boot-starter-cache')
     }
 3.数据库配置(MySQL)
  1)在项目中添加依赖
    runtime('mysql:mysql-connector-java')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-web')
  2)在数据库中创建schema
    create schema 'demo_cache' default character set utf-8
  3)在application.properties中配置数据库连接信息
    spring.datasource.url=jabc:mysql://localhost:3306/demo_cache?useUnicode=true&characterEncoding=UTF8&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driverClassName=com.mysql.jdbc.driverClassName
    spring.jpa.database=mysql
    spring.jpa.show-sql=true
    spring.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySql5Dialect
    spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNameingStrategy
  4)实体类
  5)数据访问层
  6)业务层:通常在业务逻辑层使用缓存服务
  7)控制层
  8)在启动类中,使用@EnableCaching,启用Cache功能

 

 


版权声明:本文为storyteller_qzx原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。