Spring Boot 学习笔记(九) 数据缓存

数据缓存:

Spring 缓存支持:

Spring定义了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口用来统一不同的缓存的技术。

CacheManager是Spring提供的各种缓存技术抽象接口

Cache接口包含缓存的各种操作(增加、删除、获得缓存,一般不会直接和此接口打交道。)

1、Spring支持的CacheManager

针对不同的缓存技术,需要实现不同的CacheManager:

这里写图片描述

在我们使用任意一个实现的CacheManager的时候,需注册实现的CacheManager的Bean。

例:

@Bean
public EhCacheCacheManager cacheManager(CacheManager ehCacheCacheManager){
       return new EhCacheCacheManager(ehCacheCacheManager);
}

每种缓存技术都有很多的额外配置,但配置cacheManager是必不可少的。

2、声明式缓存注解:

Spring提供了4个注解来声明缓存规则(也是使用注解式的AOP)

这里写图片描述

3、开启声明式缓存支持:

开启声明式缓存支持十分简单,只需在配置类上使用@EnableCaching注解即可,例:

@Configuration
@EnableCaching
public class AppConfig{
}

Spring Boot 的支持

Spring中使用缓存技术的关键是配置CacheManager,而Spring Boot为我们配置了多个CacheManager的实现。

Spring Boot的CacheManager的自动配置放置在org.springframework.boot.autoconfigure.cache:

这里写图片描述

从图中可以看出,Spring Boot为我们自动配置了:

EhCacheCacheConfiguration:(使用EhCache)
GenericCacheConfiguration:(使用Collection)
GuavaCacheConfiguration:(使用Guava)
HazelcastCacheConfiguration:(使用Hazelcast)
InfinispanCacheConfiguration:(使用Infinispan)
JCacheCacheConfiguration:(使用JCache)
NoOpCacheConfiguration:(不使用存储)
RedisCacheConfiguration:(使用Redis)
SimpleCacheConfiguration:(使用ConcurrentMap)

默认情况下,使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager。

Spring Boot 支持以”spring.cache”为前缀的属性来配置缓存。

spring.cache.type = #可选generic,ehcache,hazelcast,infinispan,jcache,redis,guava,simple,none
spring.cache.cache-names = #程序启动时创建缓存名称
spring.cache.ehcache.config = # ehcache配置文件地址
spring.cache.hazelcast.config = # hazelcast 配置文件地址
spring.cache.infinispan.config =# infinispan 配置文件地址
spring.cache.jcache.config = #jcache配置文件地址
spring.cache.jcache.provider=#当多个jcache实现在类路径中的时候,指定jcache实现
spring.cache.guava.spec = #guava specs

在Spring Boot环境下,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在配置类使用@EnableCaching即可。

例子:

这个例子以Spring Boot 默认的ConcurrentMapCacheManager作为缓存技术,演示@Cacheable、@CachePut、@CacheEvit,最后使用EhCache、Guava来替换缓存技术。

1、新建Spring Boot项目

这里写图片描述

使用docker,添加Oracle JDBC驱动,并在application.properties配置相关属性

2、实体类

这里写图片描述

3、实体类Repository

这里写图片描述

4、业务服务

这里写图片描述
这里写图片描述

5、控制器

这里写图片描述

6、开启缓存支持

这里写图片描述

这里讲一下@CachePut 和 @Cacheable 区别 :

@CachePut:
缓存新增或更新的数据到缓存。

@Cacheable:
当重复使用相同参数调用方法的时候,方法本身不会被调用执行,即方法本身被略过了,取而代之的是方法的结果直接从缓存中找到并返回了。

也就是说:
@CachePut和@Cacheable这两个标签可以结合使用,当需要根据请求改变值的时候,利用@CachePut将值改变并写入到缓存中,而@Cacheable标签除了第一次之外,一直是取的缓存的值。

但是需要注意的是:
1、必须是同一个缓存实例。
2、key值必须是相同的。

也就是说key和value要相同。

猜你喜欢

转载自blog.csdn.net/zxzzxzzxz123/article/details/70886540