Производительность и влияние на график разных cachenames - PullRequest
0 голосов
/ 02 июля 2019

У меня есть API, основанный на приложении весенней загрузки, которое кэширует разные методы с разной задержкой,

@Cacheable(value = "findAllByIdType", key="#p0")
List<NomenclatureEntity> findAllByIdType(String type);

@Cacheable(value = "findByIdTypeAndIdKey", key="#p0 + #p1")
NomenclatureEntity findByIdTypeAndIdKey(String type,String key); 

Конфигурация кэша:

@Configuration
@ConditionalOnExpression("${cache.enable:true}")
@EnableCaching
@EnableScheduling
public class CacheConfig {
    private static final String findByIdTypeAndIdKey = "findByIdTypeAndIdKey";
    private static final String findAllByIdType = "findAllByIdType";
    private static final Logger LOGGER = LoggerFactory.getLogger(CacheConfig.class);


      @Bean
      public CacheManager cacheManager() {
          ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager(findByIdTypeAndIdKey,findAllByIdType);

          return cacheManager;
      }

    @CacheEvict(allEntries = true, value = {findByIdTypeAndIdKey})
    @Scheduled(fixedDelay =  24 * 60 * 60 * 1000 ,  initialDelay = 500)
    public void reportCacheEvict() {
        LOGGER.debug("## Flush Data Cache findByIdTypeAndIdKey");
    }


    @CacheEvict(allEntries = true, value = {findAllByIdType})
    @Scheduled(fixedDelay =  24 * 60 * 60 * 1000 ,  initialDelay = 500)
    public void reportCacheEvict2() {
        LOGGER.debug("## Flush Data Cache findAllByIdType");
    }

}

Приложение работает безупречно, но я сомневаюсь в производительности , это хороший способ (практика) сделать это или есть лучший способ?

1 Ответ

0 голосов
/ 02 июля 2019

Это зависит от размера вашего приложения.

ConcurrentMapCacheManager

Как видно из названия, вы используете Map для кеширования ваших данных, чтобы память кучи росла так же, как и кеш.Это подходит во время разработки, но для производства рассмотрите возможность использования других типов кэша, таких как Redis.Для удаления кэша вы можете управлять им так же, как вы, или полагаться на провайдера кэша для удаления данных при достижении выделенной памяти (по умолчанию Redis использует алгоритм LRU (Least Recently Used) для удаления данных).

...