- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在缓存以异步方式发送到我的组件的对象。换句话说,这些对象到达的顺序是不可预测的。为了避免任何问题,我在我的对象中包含了一个版本属性(基本上是一个时间戳)。这个想法是,任何到达的对象的版本都比已经缓存的版本旧,它可以被丢弃。
EHCache 的“Element”类(将对象包装在 EHCache 中)似乎促进了这一点:除了键和值之外,构造函数可以采用(基于长的)版本。我无法以我期望的方式完成这项工作。以下代码片段演示了我的问题(使用 EHCache 2.1.1):
public static void main(String[] args) {
final CacheManager manager = CacheManager.create();
final Cache testCache = new Cache(new CacheConfiguration("test", 40));
manager.addCache(testCache);
final String key = "key";
final Element elNew = new Element(key, "NEW", 2L);
testCache.put(elNew);
final Element elOld = new Element(key, "OLD", 1L);
testCache.put(elOld);
System.out.println("Cache content:");
for (Object k : testCache.getKeys()) {
System.out.println(testCache.get(k));
}
}
我希望上面的代码会导致缓存值为“NEW”,而不是打印“OLD”。如果稍微调整一下插入元素的顺序,您会发现最后插入的元素将保留在缓存中。版本控制似乎被忽略了。
我是否没有正确使用版本控制功能,或者它可能不打算用于此目的?谁能推荐替代方案?
最佳答案
EhCache 显然忽略了 version
字段的值——它的含义由用户定义。所以 EhCache 在不知道版本号的含义的情况下用版本 1L
覆盖了你的版本 2L
。
参见 1) http://jira.terracotta.org/jira/browse/EHC-765
it was decided that providing an internal versioning scheme would cause unnecessary overhead for all users. Instead we now leave the version value untouched so that it is entirely within the control of the user.
和 2) http://jira.terracotta.org/jira/browse/EHC-666
[...] I would much prefer the solution proposed by Marek, that we grant the user complete control over the version attribute and to not mutate it at all internally. This prevents there being any performance impact for the bulk of users, and allows the user the flexibility to use it as they see fit. [...]
As agreed with Greg via email I fixed this as per my last comment.
我想使用 version
字段可能会导致竞争条件,导致一个线程用某个较旧的版本覆盖缓存项的最新版本。因此,在我的应用程序中,我有一个计数器来跟踪数据库的最新版本,并且当我使用不同于最新数据库版本的 version
字段加载缓存值时-value,我知道缓存的值可能过时并忽略它。
关于java - 如何在 EHCache 实例中使用元素版本控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3148476/
对于 Lucene,我们有一个很好的工具箱,如 Luke查看、诊断、编辑等。我们是否有类似的工具(至少显示)用于 EhCache(当我们启用 diskPersistent 时)? 最佳答案 我不知道有
我必须集成 spring 和 ehcache,并尝试使用 来实现它阻塞缓存 图案 有一个选项自填充缓存范围 对于 共享(默认)和方法 .你能解释一下有什么区别吗? 还有注解 @可缓存与 自我填充 旗
我有一个配置为使用 JPA 和 Hibernate 的大型 Java 应用程序。据说它还被配置为对实体和查询缓存使用 ehcaching。但是,我打开了 sql 日志记录,并且没有缓存任何实体。所有实
正如您在标题中看到的那样,问题很清楚,很高兴听到您对 adv./disadv 的想法。它们之间的差异。 更新:我决定使用 Hazelcast,因为它具有分布式缓存/锁定机制等优点,并且在适应您的应用程
我知道属性“updateCheck”可以在 XML 中设置为“false”,如下所示: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xs
我在不同的类中创建了两个方法,并使用 @Cacheable 注释对它们进行注释,并给出了相同的缓存名称,如下所示: class MyClass{ @Cacheable(value="inSco
我正在尝试新的 ehcache 版本,但我注意到,显然,没有搜索 API。 这是正常的还是我错过了什么?文档没有说明这一点。 最佳答案 主要原因是在缓存中搜索在到期和驱逐时具有非常奇怪的语义。由于 E
在 Ehcache 2 中,可以使用 calculateInMemorySize() 获取内存中的大小,例如: CacheManager manager = CacheManager.create()
如果我有以下配置: timeToIdleSeconds 的值是多少用于缓存 test ?它会从默认缓存继承,因此等于 120,还是会采用手册中给出的默认值,即 0(无穷大)? 最佳答案 timeT
我正在使用 ehcache 通过 hibernate 缓存实体。 查看ehcache监视器,一切似乎都工作正常(刷新将缓存计数设置为零,然后重新加载将计数放回一),但是如果我直接在数据库上更改某些值并
ehcache 是一个高度可配置的野兽,示例相当复杂,通常涉及多层接口(interface)。 有没有人遇到过最简单的例子,它只是在内存中缓存一个数字(不是分布式的,没有 XML,尽可能少的 java
net.sf.ehcache.CacheManager.ALL_CACHE_MANAGERS 是否有替代品?在 org.ehcache ehcach
使用 Ehcache 3.1,我可以知道当前存储在 ehcache 中的元素的大小以及缓存到目前为止的命中和未命中数。我认为 2.6 有 .getStatistics(),它做类似的事情,但是我在 3
我是 Spring 框架中的 ehcache v/s ehcache-core 的初学者,我的 pom.xml 使用的是 ehcache 版本 1.5.0 net.sf.ehcache ehcach
我正在运行一个使用 Ehcache 3.4.0 的网络应用程序。我有一个缓存配置,它定义了 1000 个内存中对象的简单默认值: java.lang.Object java.lang
我想找到一种在 ehCache 装饰器类中使用 Spring 依赖注入(inject)的好方法。我的 ehcache.xml 具有以下缓存配置: 我有以下装饰器实现: public cl
我想弄清楚最新版本的 Ehcache(2.7.0、2.7.1、2.7.2、2.7.4、2.7.5、2.8.0)是否真的有新版本的 ehcache-core或者如果 ehcache-core 自版本 2
我们在 WebLogic Server 10.3.4 上运行 Spring 3.0.5 Web 应用程序Solaris with Sun JVM 1.6.0_x 64bit 使用 EhCache 2.
ehcache 3.8.1 是否不再自动获取源根目录下的 ehcache.xml 文件中的配置设置? 最佳答案 是的,看起来是这样,现在需要使用 XML 文件来完成 configuringe a Ca
http://ehcache.org/generated/2.9.0/html/ehc-all/#page/Ehcache_Documentation_Set%2Fco-use_supported_t
我是一名优秀的程序员,十分优秀!