0

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

4

3 回答 3

0

如果您在 xml 中添加 time-to-idle 或从 Expiry 接口覆盖 getExpiryForAccess,那么当您访问它们时,您的条目将不会被删除。下面是使用自定义 Expire 构建 Eh 缓存的代码。此博客将帮助您了解其他属性解释。

        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);
于 2016-12-09T12:43:18.510 回答
0

查看文档中有关到期的专用部分。它将帮助您了解您可以做什么以及如何去做。

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

于 2016-12-09T11:45:31.923 回答
0

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

于 2020-05-11T20:57:54.193 回答