Spring Boot—10、缓存

34 篇文章 0 订阅
21 篇文章 0 订阅

工程代码:https://github.com/huiyiwu/spring-boot-simple/spring-boot-data-redis
参考文章:Spring Boot Redis Cache

针对于缓存,只整理了关于Redis的使用,其他缓存提供程序未用代码实现

Spring Framework支持向应用程序添加缓存。从本质上讲,抽象将缓存应用于方法,从而根据缓存中可用的信息减少执行次数。缓存逻辑应用透明,不会对调用者造成任何干扰。只要通过@EnableCaching注释启用了缓存支持,Spring Boot就会自动配置缓存基础结构。
示例:

@Component
public class MathService {

	@Cacheable("piDecimals")
	public int computePiDecimal(int i) {
		// ...
	}
}

如果有与参数匹配的数据,则返回缓存的数据;如果没有,则调用方法,并在返回值之前更新缓存。

1. 支持的缓存提供程序

未定义CacheManager的bean或名为cacheResolver的CacheResolver时,Spring Boot会按照顺序检测提供者:

  1. Generic
  2. JCache(JSR-107)(Ehche3,Hazelcast,Infinishpan等)
  3. Ehche 2.x
  4. Hazelcast
  5. Infinispan
  6. Couchbase
  7. Redis
  8. Caffeine
  9. Simple
    通过spring.cache.type属性指定特定的缓存提供程序。
    可以通过CacheManagerCustomizer接口的bean在完全初始化之前调整其配置:

2. Generic(通用)

如果定义至少一个org.springframework.cache.Cache,则使用了Generic缓存。创建了包含该类型的所有beans的CacheManager

3. JCache

JCache通过类路径上的javax.cache.spi.CacheingProvider进行自举,由spring-boot-starter-cache提供。

可以使用属性明确指定提供程序及定义配置文件的位置:

spring: 
	cache: 
		jcache:
			provider: com.huchx.MyProvider
			config: classpath:acme.xml

自定义基础javax.cache.cacheManager:

  • 通过设置spring.cache.cacha-names属性在启动时创建缓存,如果定义了自定义javax.cache.configuration.Configuration bean,则会使用其来自定义CacheManager;
  • 使用org.spring.framework.boot.autoconfigure.cache.JCacheManagerCustomizer beans来完全自定义

4. EhCache 2.x

如果在类路径中的根目录中找到名为ehcache.xml的文件,则使用EhCache 2.x,此时使用EhCacheManager用于引导缓存管理器。也可以提供备用配置文件:

spring:
	cache:
		ehcache:
			config: classpath:config/another-config.xml

5. Hazelcast

如果已经配置HazelcastInstance,则会自动将其包装在CacheManager中。

6. Infinispan

Infinispan没有默认配置文件位置,需要明确指定,否则使用默认引导程序:

spring:
	cache:
		infinispan:
			config: infinispan.xml

可以通过spring.cache.cache-names属性在启动时创建缓存。如果定义了自定义ConfigurationBuilder bean,则用于自定义缓存。

7. Couchbase

如果Couchbase Java Client和couchbase-spring-cache实现可用并且已配置Couchbase,则会自动配置CouchbaseCacheManager.

可以spring.cache.cache-names在启动时创建其他缓存。
示例:设置两个缓存cache1,cache2

spring:
	cache:
		cache-names: cache1,cache2

然后可以定义@Configuration类来配置额外的缓存:

@Configuration
public class CouchbaseCacheConfiguration {

	private final Cluster cluster;

	public CouchbaseCacheConfiguration(Cluster cluster) {
		this.cluster = cluster;
	}

	@Bean
	public Bucket anotherBucket() {
		return this.cluster.openBucket("another", "secret");
	}

	@Bean
	public CacheManagerCustomizer<CouchbaseCacheManager> cacheManagerCustomizer() {
		return c -> {
			c.prepareCache("cache3", CacheBuilder.newInstance(anotherBucket())
					.withExpiration(2));
		};
	}

}

8. Redis

如果Redis可用且已配置,则会自动配置RedisManager

通过设置spring.cache.cache-names在启动时创建内存,并且可以使用spring.cache.redis.*属性配置缓存默认值。
示例:

spring:
	cache:
		cache-names:cache1,cache2
		redis: 
			time-out-live: 60000

9. Caffeine

Caffeine是Java 8重写的Guava缓存,取代了对Guava的支持。如果设置Caffeine,则自动配置CaffeineCacheManager

可以通过设置spring.cache.cache-names属性在启动时创建缓存,并且可以通过以下方式之一自定义缓存:

  1. spring.cache.caffeine.spec规范定义的缓存
  2. 自定义com.github.benmanes.caffeine.cache.CaffeineSpec bean
  3. 自定义com.github.benanes.caffeine.cache.Caffeine bean

如果自定义com.github.benmanes.caffeine.cache.CacheLoader bean,其将自动与CaffeineCacheManager关联,由于CacheLoader将于缓存管理器管理的所有缓存关联,必须将其定义为Cacheloader<Object,Object>.

10. Simple

如果找不到其他应用程序,则配置默认使用ConcurrentHasMap作为缓存存储的简单实现

通过cache-names设置可用缓存列表,如只要cache1,cache2:

spring: 
	cache:
		cache-name:cache1,cache2

11. None

当配置中存在@EnableCaching时需要合适的缓存配置。设置spring.cache.type=none完全禁用缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值