Spring Boot入門-進級編(5)-データキャッシュ(@Cacheable)
4103 ワード
詳細
キャッシュはデータベースアクセスの圧力を緩和することができ、Spring自身はキャッシュのストレージ実装を提供せず、JCache、EhCache、Hazelcast、Redis、Guavaなどのサードパーティを借りる必要がある.Spring Bootでは、適切なキャッシュマネージャ(CacheManager)の構成を自動化できます.デフォルトでは、ConcurrentMapCacheManager(java.util.concurrent.ConcurrentHashMap)が使用されます.
(1)spring-boot-starter-cache依存の追加
(2)キャッシュ機能のオン
(3)キャッシュデータ
キャッシュの操作は,@Cacheable,@CachePut,@CacheEveictが主である.
@Cacheable
Spring@Cacheable注記のメソッドを実行する前に、キャッシュにデータがあるかどうかを確認し、データがある場合はキャッシュデータを直接返します.データがない場合は、メソッドを実行し、メソッドの戻り値をキャッシュに入れます.
パラメータ:valueキャッシュ名、keyキャッシュキー値、conditionがキャッシュ条件を満たす、unlessがキャッシュ条件を拒否する
@CachePut
@Cacheableと似ていますが、メソッドの戻り値はキャッシュに格納され、主にデータの新規作成やメソッドの変更に使用されます.
@CacheEvict
メソッドが正常に実行されると、対応するデータがキャッシュから削除されます.
パラメータ:valueキャッシュ名、keyキャッシュキー値、conditionがキャッシュ条件を満たす、unlessがキャッシュ条件を拒否する、allEntriesがすべてのデータを除去するかどうか(trueに設定するとすべてのキャッシュが除去されます)
(4)集積EhCache
SpringBootは、特別な設定を必要とせずに自動的に設定できます.
src/main/resources/ehcache.xml
src\main\resources/application.properties
参照
spring.cache.ehcache.config=classpath:ehcache.xml
パーソナライズされたパラメータをカスタマイズする場合は、Java Config形式で構成します.
(5)コンビネーションCacheManager
複数のCacheManagerからポーリングして対応するCacheを取得します.
***キャッシュ無効化springを設定する.cache.type=none
***キャッシュされたオブジェクトはSerializableを実装する必要があります
***GuavaCacheManagerのほかにSpringトランザクションがサポートされています.つまり、ロールバック時にCacheのデータも削除されます.
キャッシュはデータベースアクセスの圧力を緩和することができ、Spring自身はキャッシュのストレージ実装を提供せず、JCache、EhCache、Hazelcast、Redis、Guavaなどのサードパーティを借りる必要がある.Spring Bootでは、適切なキャッシュマネージャ(CacheManager)の構成を自動化できます.デフォルトでは、ConcurrentMapCacheManager(java.util.concurrent.ConcurrentHashMap)が使用されます.
(1)spring-boot-starter-cache依存の追加
org.springframework.boot
spring-boot-starter-cache
(2)キャッシュ機能のオン
@Configuration
@EnableCaching
public class CacheConfig {
}
(3)キャッシュデータ
キャッシュの操作は,@Cacheable,@CachePut,@CacheEveictが主である.
@Cacheable
Spring@Cacheable注記のメソッドを実行する前に、キャッシュにデータがあるかどうかを確認し、データがある場合はキャッシュデータを直接返します.データがない場合は、メソッドを実行し、メソッドの戻り値をキャッシュに入れます.
パラメータ:valueキャッシュ名、keyキャッシュキー値、conditionがキャッシュ条件を満たす、unlessがキャッシュ条件を拒否する
@Cacheable(value = "user", key = "#id")
public User findById(final Long id) {
System.out.println("cache miss, invoke find by id, id:" + id);
for (User user : users) {
if (user.getId().equals(id)) {
return user;
}
}
return null;
}
@CachePut
@Cacheableと似ていますが、メソッドの戻り値はキャッシュに格納され、主にデータの新規作成やメソッドの変更に使用されます.
@CachePut(value = "user", key = "#user.id")
public User save(User user) {
users.add(user);
return user;
}
@CacheEvict
メソッドが正常に実行されると、対応するデータがキャッシュから削除されます.
パラメータ:valueキャッシュ名、keyキャッシュキー値、conditionがキャッシュ条件を満たす、unlessがキャッシュ条件を拒否する、allEntriesがすべてのデータを除去するかどうか(trueに設定するとすべてのキャッシュが除去されます)
@CacheEvict(value = "user", key = "#user.id") // key
public User delete(User user) {
users.remove(user);
return user;
}
@CacheEvict(value = "user", allEntries = true) //
public void deleteAll() {
users.clear();
}
(4)集積EhCache
net.sf.ehcache
ehcache
SpringBootは、特別な設定を必要とせずに自動的に設定できます.
src/main/resources/ehcache.xml
src\main\resources/application.properties
参照
spring.cache.ehcache.config=classpath:ehcache.xml
パーソナライズされたパラメータをカスタマイズする場合は、Java Config形式で構成します.
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
}
@Bean
public EhCacheManagerFactoryBean ehCacheCacheManager() {
EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();
cmfb.setConfigLocation(new ClassPathResource("ehcache.xml"));
cmfb.setShared(true);
return cmfb;
}
}
(5)コンビネーションCacheManager
複数のCacheManagerからポーリングして対応するCacheを取得します.
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager compositeCacheManager(RedisTemplate
***キャッシュ無効化springを設定する.cache.type=none
***キャッシュされたオブジェクトはSerializableを実装する必要があります
***GuavaCacheManagerのほかにSpringトランザクションがサポートされています.つまり、ロールバック時にCacheのデータも削除されます.