【问题标题】:Implementing Custom EhCache实现自定义 EhCache
【发布时间】:2017-12-07 13:21:02
【问题描述】:

我们要求每个 userId-sessionID 对最多缓存 2 个类别的请求。我们计划将 EhCache 用于这种方法。该项目是一个 Spring Boot 应用程序。

@Cacheable(value="products")
ProductList getProducts(String userID, String sessionID, String categoryID) {
   return getProductListForThisUserAndSessionAndCategory(userId, sessionId, categoryId;) 
}

问题是,当每个用户和会话 ID 对可能有多个类别时,如何将限制设置为每个 userID-sessionId 最多 2 个缓存元素?
一种方法: 设置 sessionId 和 userID 的部分键并创建一个自定义缓存,每个 sessionID-userID 键最多可以接受两个值。 EhCache 如何支持自定义缓存?
还有其他方法吗?

【问题讨论】:

    标签: java spring-boot ehcache-3


    【解决方案1】:

    如果我的问题正确,您将更改缓存的最大映射数,您可以像这样配置

    import org.ehcache.config.builders.CacheConfigurationBuilder;
    import org.ehcache.config.builders.ResourcePoolsBuilder;
    import org.ehcache.expiry.Duration;
    import org.ehcache.expiry.Expirations;
    import org.ehcache.jsr107.Eh107Configuration;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.autoconfigure.AutoConfigureAfter;
    import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.annotation.PreDestroy;
    import java.util.concurrent.TimeUnit;
    
    
    @Configuration
    @EnableCaching
    public class CacheConfiguration {
    
        private final Logger log = LoggerFactory.getLogger(CacheConfiguration.class);
        private final javax.cache.configuration.Configuration<Object, Object> jcacheConfiguration;
    
    
        @PreDestroy
        public void destroy() {
            log.info("Remove Cache Manager metrics");
            log.info("Closing Cache Manager");
        }
    
        public CacheConfiguration(JHipsterProperties jHipsterProperties) {
    
            jcacheConfiguration = Eh107Configuration.fromEhcacheCacheConfiguration(
                    CacheConfigurationBuilder.newCacheConfigurationBuilder(Object.class, Object.class,
                            ResourcePoolsBuilder.heap(2))
                            .withExpiry(Expirations.timeToLiveExpiration(Duration.of(3600, TimeUnit.SECONDS)))
                            .build()
            );
        }
    
        @Bean
        public JCacheManagerCustomizer cacheManagerCustomizer() {
            log.debug("Starting Ehcache");
    
            return cm -> {
                cm.createCache("products", jcacheConfiguration);
            };
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-30
      • 2015-01-12
      • 1970-01-01
      • 2014-02-01
      • 2014-10-14
      • 2011-06-04
      • 2010-10-29
      • 2011-01-10
      相关资源
      最近更新 更多