三十四、Springboot集積SpringCache+Redis、キャッシュを実現
11133 ワード
SpringCacheの注記やRedisのストレージ、期限切れなどを利用するために、SpringCache+RedisをSpringbootに統合します.
(一)カスタムキャッシュプロファイル
(二)オープンキャッシュ@EnableCaching:オープンキャッシュ
(三)応用
(一)カスタムキャッシュプロファイル
@Configuration
public class CacheConfiguration {
/** * */
public static final String BOOKS_SEARCH_CACHE = "books_search";
/** * */
public static final String CHAPTERS_BOOK_CACHE = "chapters_book";
/** * */
public static final String CHAPTER_CONTENT_CACHE = "chapter_content";
@Primary
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory){
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
redisCacheConfiguration = redisCacheConfiguration
// :30
.entryTtl(Duration.ofMinutes(30L))
// ,
.disableCachingNullValues()
// key
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
// value
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()));
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration)
.build();
}
/** * key */
private RedisSerializer<String> keySerializer() {
return new StringRedisSerializer();
}
/** * value */
private RedisSerializer<Object> valueSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}
(二)オープンキャッシュ@EnableCaching:オープンキャッシュ
@SpringBootApplication
@ServletComponentScan
@MapperScan("com.yuedu.dao")
@EnableScheduling
@EnableCaching
public class YueduApplication {
public static void main(String[] args) {
SpringApplication.run(YueduApplication.class, args);
}
}
(三)応用
@Cacheable(cacheNames = CacheConfiguration.CHAPTERS_BOOK_CACHE, key = "#root.methodName+'['+#bookId+']'")
public List<Chapter> searchChaptersByBookId(Integer bookId, int start, int size) {
if (bookId == null || bookId < 1){
throw new BaseException(ResultEnum.PARAM_ERROR);
}
Chapter chapter = new Chapter();
chapter.setBookId(bookId);
//
PageHelper.startPage(start, size);
return selectChapters(chapter);
}