Springboot 2(18)データキャッシュを簡単に作成

2830 ワード

キャッシュはデータベースアクセスの圧力を緩和することができ、Spring自身はキャッシュのストレージ実装を提供せず、JCache、EhCache、Hazelcast、Redis、Guavaなどのサードパーティを借りる必要がある.Spring Bootでは、適切なキャッシュマネージャの構成を自動化できます.デフォルトではConcurrentMapCacheManager(java.util.concurrent.ConcurrentHashMap)が使用されます.
spring-boot-starter-cache依存性の追加
  
    org.springframework.boot  
    spring-boot-starter-cache  
 

キャッシュ機能をオンにする
@Configuration  
@EnableCaching  
public class CacheConfig {  
  
}

データのキャッシュ
キャッシュの操作は,@Cacheable,@CachePut,@CacheEveictが主である.
@Cacheable
Spring@Cacheable注記のメソッドを実行する前に、キャッシュにデータがあるかどうかを確認し、データがある場合はキャッシュデータを直接返します.データがない場合は、メソッドを実行し、メソッドの戻り値をキャッシュに入れます.パラメータ:valueキャッシュ名、keyキャッシュキー値、conditionがキャッシュ条件を満たす、unlessがキャッシュ条件を拒否する
@CachePut
@Cacheableと同様に、キャッシュにデータがあるかどうかにかかわらず、このメソッドを実行し、メソッドの戻り値をキャッシュに入れます.主に、データの新規作成とメソッドの変更に使用されます.
@CacheEvict
メソッドが正常に実行されると、対応するデータがキャッシュから削除されます.パラメータ:valueキャッシュ名、keyキャッシュキー値、conditionがキャッシュ条件を満たす、unlessがキャッシュ条件を拒否する、allEntriesがすべてのデータを除去するかどうか(trueに設定するとすべてのキャッシュが除去されます)
@Component
@Slf4j
public class CacheUtil {
​
    @Autowired
    User user;
​
    @Cacheable(value = "user", key = "#user.name")
    public User getUser(User user){
        log.info("get user");
        return user;
    }
​
    @CachePut(value = "user", key = "#user.name")
    public User saveUser(User user){
        log.info("save user");
        return user;
    }
​
    @CacheEvict(value = "user", key = "#name") //     key   
    public void deleteUser(String name){
        log.info("delete user");
    }
​
    @CacheEvict(value = "user", allEntries = true) //       
    public void deleteAll() {
        log.info("delete All");
    }
​
}

統合EhCache
依存の追加
  
    net.sf.ehcache  
    ehcache  
 
ehcache.xmlsrc/main/resourcesに配置し、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;  
    }  
  
}

 
キャッシュされたオブジェクトはSerializableを実装する必要があります