如何在ehCache 3.0中扩展到期功能

时间:2016-12-08 06:49:38

标签: java ehcache jcache jsr107

我使用的是EhCache核心3.0。它在内部使用BaseExpiry和Eh107Expiry类来检查缓存是否过期。这些类实现了Expiry接口。我的查询是,我们可以扩展用于检查缓存是否过期的方法。如果我的方法使用来自该缓存的一些数据,即使时间已过,我也不想使缓存的内容过期。

3 个答案:

答案 0 :(得分:0)

查看文档中的专用section on Expiry。它将帮助您了解您可以做什么以及如何做。

如果这对您没有帮助,请按照评论中的建议扩展您的问题。

答案 1 :(得分:0)

If you add time-to-idle in xml or override getExpiryForAccess from Expiry interface,then your entries will not delete when you are accessing them.Below is the code to build Eh cache with custom Expire.This blog will help you for other properties with explanation.

        CacheConfigurationBuilder<Integer,String> cacheConfigurationBuilder = CacheConfigurationBuilder.newCacheConfigurationBuilder();
        cacheConfigurationBuilder.withExpiry(new Expiry() {
            @Override
            public Duration getExpiryForCreation(Object key, Object value) {
                return new Duration(120, TimeUnit.SECONDS);
            }

            @Override
            public Duration getExpiryForAccess(Object key, Object value) {
                return new Duration(120, TimeUnit.SECONDS);
            }

            @Override
            public Duration getExpiryForUpdate(Object key, Object oldValue, Object newValue) {
                return null;
            }
        })
                .usingEvictionPrioritizer(Eviction.Prioritizer.LFU)
                .withResourcePools(ResourcePoolsBuilder.newResourcePoolsBuilder().heap(200, EntryUnit.ENTRIES))
                        // adding defaultSerializer config service to configuration
                .add(new DefaultSerializerConfiguration(CompactJavaSerializer.class, SerializerConfiguration.Type.KEY))
                .buildConfig(Integer.class, String.class);

答案 2 :(得分:0)

我想您可以使用ehcache装饰器,并重新实现isExpiry来添加自己的条件。请参阅https://www.ehcache.org/documentation/2.8/apis/cache-decorators.html