Caffeine Cache
Cache
コンピュータ科学においてデータや値を予め複製する一時的な場所を指す.
データをキャッシュに事前にコピーすると、計算やアクセス時間を必要とせずにデータに迅速にアクセスできます.
Global Cache
1.複数のサーバ(WAS)リファレンスキャッシュサーバ
2.複数のサーバ間でのデータ共有が容易
3.ネットワークの使用速度がローカルキャッシュより遅い
4.代表的なRedis、Medicached
Local Cache
1.サーバごとにキャッシュを個別に保存する(データ整合性の問題が発生する可能性がある)
2.サーバ間でのデータ共有が困難
3.サーバ内ストレージ、高速化
4.典型的なCaffeine、Ehcache
キャッシュの適用先
2. Spring Boot Cache
2-1. アプリケーションコード
1.依存項目の追加:spring-boot-start-cache
// build.gradle
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache'
2.@EnableCaching追加
// XXAplication.java
...
@EnableCaching
public class XXApplication {
...
public static void main(String args[]) {
...
}
}
3.CacheManager Beanの登録
// CacheConfig.java
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
SimpleCacheManager manager = new SimpleCacheManager();
manager.setCaches(Arrays.asList(
new ConcurrentMapCache("cache-1"),
new ConcurrentMapCache("cache-2")
));
return manager;
}
}
4.キャッシュの使用
// XXXService.java
public class XXXService {
...
@Cacheable(value = "cache-1")
public String getValue(String parameter) {
...
return value;
}
@CacheEvict(value = "cache-1")
public String method(String parameter) { ... }
@CachePut(value = "cache-1")
public String method(String parameter) { ... }
}
2-2. Annotations
AnnotationsDescriptions@EnableCaching-キャッシュ機能を有効にする-キャッシュマネージャbeanを呼び出し、Springが管理@キャッシュを開始したときに値を返します.ない場合は、新規登録-メソッドの戻り値をキャッシュに保存@CacheEvet-Cache削除-リソース変更操作の実行時に@CachePut-Cacheデータリフレッシュを適用
3. Caffeine
vs EHCACHE
// build.gradle
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache'
// XXAplication.java
...
@EnableCaching
public class XXApplication {
...
public static void main(String args[]) {
...
}
}
// CacheConfig.java
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
SimpleCacheManager manager = new SimpleCacheManager();
manager.setCaches(Arrays.asList(
new ConcurrentMapCache("cache-1"),
new ConcurrentMapCache("cache-2")
));
return manager;
}
}
// XXXService.java
public class XXXService {
...
@Cacheable(value = "cache-1")
public String getValue(String parameter) {
...
return value;
}
@CacheEvict(value = "cache-1")
public String method(String parameter) { ... }
@CachePut(value = "cache-1")
public String method(String parameter) { ... }
}
vs EHCACHE
vs SimpleCacheManager
3-1. アプリケーションコード
全体の使い方は2です.Spring Boot Cacheコードと同じ
1.Dependency:Caffeineの追加
// build.gradle
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache'
implementation group: 'com.github.ben-manes.caffeine', name: 'caffeine'
2.キャッシュの定義
// CacheType.java
@Getter
public enum CacheType {
CACHE("name", 1L, 1L);
CacheType(String name, Long expireTime, Long maximumSize) {
this.name = name;
this.expireTime = expireTime;
this.maximumSize = this.maximumSize;
}
private String name;
private Long expireTime;
private Long maximumSize;
}
3.Cache ManagerにCacheを登録する
// CacheConfig.java
@Configuration
public class CacheConfig {
@Bean
public CacheManager manager {
SimpleCacheManager manager = new SimpleCacheManager();
List<CaffeineCache> caches = Arrays.stream(CacheType.values())
.map(cache -> new CaffeineCache(cache.getName(), Caffeine.newBuilder()
.expireAfterWrite(cache.getExpireTime(), TimeUnit.MINUTS)
.maximumSize(cache.getMaximumSize())
.build())
.collect(Collectors.toList());
}
}
疑問点
Q.Caffeine CacheManagerではなくCaffeine Cacheを使う理由は?
A.CaffeineCacheManagerとSimpleCacheManagerは、ConcurrentMapを使用しています.コードの読み取り可能性の高い単純モードマネージャを使用してbeanを登録することを決定します.
問:MaximumCountの意味は何ですか.
A.@Cacheableが保留されると、cacheが適用され、設定方法のパラメータで最大何個の入力値を指定できますか.
References
Cache
Cache
Caffeine
EHCACHE
Reference
この問題について(Caffeine Cache), 我々は、より多くの情報をここで見つけました https://velog.io/@sixhustle/caffeine-cacheテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol