计划不同缓存名称的性能和影响

时间:2019-07-02 13:55:41

标签: performance api spring-boot scheduler

我有一个基于Spring Boot应用程序的API,该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 :(得分:0)

这取决于您的应用程序的大小。

ConcurrentMapCacheManager

顾名思义,您使用Map来缓存数据,因此堆的内存将与缓存相同。这适合在开发期间使用,但对于生产而言,请考虑使用其他类型的缓存,例如Redis。 对于缓存逐出,您可以像以前一样对其进行控制,或者在达到分配的内存时依靠缓存提供者逐出数据(默认情况下,Redis使用LRU (Least Recently Used)算法来逐出数据)。