springboot開啟redis快取
阿新 • • 發佈:2021-12-02
引入依賴
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- spring2.X整合redis所需common-pool2--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.6.0</version> </dependency>
編寫Redis的配置類
/** *@EnableCaching: 開啟快取 **/ @EnableCaching @Configuration public class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate<String, Object> redisTemplate( RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); //om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); om.activateDefaultTyping(om.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setConnectionFactory(factory); //key序列化方式 template.setKeySerializer(redisSerializer); //value序列化 template.setValueSerializer(jackson2JsonRedisSerializer); //value hashmap序列化 template.setHashValueSerializer(jackson2JsonRedisSerializer); return template; } @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); //解決查詢快取轉換異常的問題 ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); // 配置序列化(解決亂碼的問題),過期時間600秒 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofSeconds(600)). serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)). serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) .disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); return cacheManager; } }
SpringBoot快取註解詳解
- @Cacheable
根據方法對其返回結果進行快取,下次請求時,如果快取存在,則直接讀取快取資料返回;如果快取不
存在,則執行方法,並把返回的結果存入快取中。一般用在查詢方法上。
屬性/方法名 | 解釋 | 是否可選 |
---|---|---|
value | 快取名, 他指定了快取存放在那塊名稱空間 | 必填 |
cacheNames | 與value差不多,二選一即可 | 可選 |
key | 可以使用SpEL標籤自定義快取的key | 可選 |
- 快取@CachePut
使用該註解標誌的方法,每次都會執行,並將結果存入指定的快取中。其他方法可以直接從響應的快取
中讀取快取資料,而不需要再去查詢資料庫。一般用在新增方法上。
屬性/方法名 | 解釋 | 是否可選 |
---|---|---|
value | 快取名, 他指定了快取存放在那塊名稱空間 | 必填 |
cacheNames | 與value差不多,二選一即可 | 可選 |
key | 可以使用SpEL標籤自定義快取的key | 可選 |
- 快取@CacheEvict
使用該註解標誌的方法,會清空指定的快取。一般用在更新或者刪除方法上
檢視原始碼,屬性值如下:
屬性/方法名 | 解釋 | 是否可選 |
---|---|---|
value | 快取名, 他指定了快取存放在那塊名稱空間 | 必填 |
cacheNames | 與value差不多,二選一即可 | 可選 |
key | 可以使用SpEL標籤自定義快取的key | 可選 |
allEntries | 是否清空所有快取,預設為 false。如果指定為 true,則方法呼叫後將立即清空所有的快取 | 可選 |
beforeInvocation | 是否在方法執行前就清空,預設為false。如果指定為true,則在方法執行前清空快取 | 可選 |