網(wǎng)站上線需要哪些步驟2345電腦版網(wǎng)址導(dǎo)航
目錄
緩存支持
?緩存集成
redis緩存集成
緩存支持
Spring 框架只提供抽象,不提供具體的緩存存儲(chǔ),底層需要依賴第三方存儲(chǔ)組件,如果當(dāng)前應(yīng)用沒(méi)有注冊(cè)CacheManager 或者 CacheResolver 實(shí)例,Spring Boot 會(huì)按以下緩存組件的順序來(lái)檢測(cè):
- Generic
- JCache (SR-107)(EhCache 3, Hazelcast, Infinispan 等等)
- Hazelcast
- lnfinispan
- Couchbase
- redis
........
Spring Boot的自動(dòng)配置類為:CacheAutoConfiguration,在 CacheAutoConfiguration 緩存自動(dòng)配置類中引入了 CacheConfigurationImportSelector 配置選擇器:
@AutoConfiguration(after = { CouchbaseDataAutoConfiguration.class, HazelcastAutoConfiguration.class,HibernateJpaAutoConfiguration.class, RedisAutoConfiguration.class })
@ConditionalOnClass(CacheManager.class)
@ConditionalOnBean(CacheAspectSupport.class)
@ConditionalOnMissingBean(value = CacheManager.class, name = "cacheResolver")
@EnableConfigurationProperties(CacheProperties.class)
@Import({ CacheConfigurationImportSelector.class, CacheManagerEntityManagerFactoryDependsOnPostProcessor.class })
public class CacheAutoConfiguration {...static class CacheConfigurationImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {CacheType[] types = CacheType.values();String[] imports = new String[types.length];for (int i = 0; i < types.length; i++) {imports[i] = CacheConfigurations.getConfigurationClass(types[i]);}return imports;}}
該選擇器通過(guò) CacheConfiqurations 緩存配置類來(lái)選擇對(duì)應(yīng)緩存組件的配置類:
final class CacheConfigurations {private static final Map<CacheType, String> MAPPINGS;static {Map<CacheType, String> mappings = new EnumMap<>(CacheType.class);mappings.put(CacheType.GENERIC, GenericCacheConfiguration.class.getName());mappings.put(CacheType.HAZELCAST, HazelcastCacheConfiguration.class.getName());mappings.put(CacheType.INFINISPAN, InfinispanCacheConfiguration.class.getName());mappings.put(CacheType.JCACHE, JCacheCacheConfiguration.class.getName());mappings.put(CacheType.COUCHBASE, CouchbaseCacheConfiguration.class.getName());mappings.put(CacheType.REDIS, RedisCacheConfiguration.class.getName());mappings.put(CacheType.CAFFEINE, CaffeineCacheConfiguration.class.getName());mappings.put(CacheType.CACHE2K, Cache2kCacheConfiguration.class.getName());mappings.put(CacheType.SIMPLE, SimpleCacheConfiguration.class.getName());mappings.put(CacheType.NONE, NoOpCacheConfiguration.class.getName());MAPPINGS = Collections.unmodifiableMap(mappings);}...代碼...}
?緩存集成
依賴配置:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
加入依賴后,通過(guò)使用@EnableCaching
注解來(lái)啟用緩存功能。通過(guò)參數(shù)type指定要使用的緩存組件,以redis為示例:
spring:cache: type: redis
禁用緩存
spring:cache: type: none
?緩存類型type的值
GENERIC
: 通用緩存類型HAZELCAST
: Hazelcast 緩存類型INFINISPAN
: Infinispan 緩存類型JCACHE
: JCache 緩存類型COUCHBASE
: Couchbase 緩存類型REDIS
: Redis 緩存類型CAFFEINE
: Caffeine 緩存類型CACHE2K
: Cache2k 緩存類型SIMPLE
: 簡(jiǎn)單緩存類型NONE
: 無(wú)緩存類型
redis緩存集成
在Spring Boot 2.7中使用@EnableCaching注解啟用緩存功能時(shí),如果你想使用Redis作為緩存存儲(chǔ),你需要在配置文件中指定Redis的相關(guān)配置。
application.properties或application.yml文件中添加以下配置:
spring:cache:type: redis # 指定緩存使用redisredis:host: 127.0.0.1 # Redis服務(wù)器地址database: 1 # Redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0)port: 6379 # Redis服務(wù)器連接端口password: # Redis服務(wù)器連接密碼(默認(rèn)為空)
依賴配置:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
?配置緩存管理器:
@Configuration
@EnableCaching
public class RedisTemplateConfiguration {/*** 默認(rèn)過(guò)期時(shí)長(zhǎng),單位:秒*/@Getterprivate long expire = 60 * 60 * 24;
?@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());redisTemplate.setValueSerializer(RedisSerializer.java());redisTemplate.setHashValueSerializer(RedisSerializer.java());redisTemplate.setConnectionFactory(factory);return redisTemplate;}
?@Beanpublic HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForHash();}
?@Beanpublic ValueOperations<String, String> valueOperations(RedisTemplate<String, String> redisTemplate) {return redisTemplate.opsForValue();}
?@Beanpublic ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForList();}
?@Beanpublic SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForSet();}
?@Beanpublic ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForZSet();}
}