Я кэширую объекты, которые отправляются в мой компонент асинхронным способом.Другими словами, порядок, в котором поступают эти объекты, непредсказуем.Чтобы избежать каких-либо проблем, я включил атрибут версии в мои объекты (который в основном является временной меткой).Идея состоит в том, что любой объект, который прибывает с версией, которая старше, чем та, которая уже была кэширована, он может быть отброшен.
Класс EHCache «Элемент» (который оборачивает объекты в 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».Если вы немного поиграете с порядком, в котором вставляются элементы, вы обнаружите, что последний, который был вставлен, - это тот, который останется в кэше.Управление версиями игнорируется.
Правильно ли я использую функцию управления версиями или, возможно, она не предназначена для этой цели?Кто-нибудь может порекомендовать альтернативы?