Ehcache - использование List в качестве значения кеша

Итак, вот проблема, которую я пытаюсь решить - у меня есть объект с двумя целочисленными полями, которые я хочу кэшировать

public class MyObject {
   int x;
   int y;
   ....
}

Теперь поле x - это то, что я в основном использую, но могут быть дубликаты, и в этом случае я хочу вернуться ко второму полю (так, чтобы this.x = that.x и this.y = that.y). y может быть только 25 различных значений. Теперь я знаю, что могу просто объединить их как строку и использовать ее как ключ кеша, но тогда мне придется попробовать x + [25 возможных значений] , чтобы определить, не было ли этого в кеше - делать промахи в кэше очень дорого Я думал о попытке сохранить List в качестве значения кеша для поля x , а затем, если их было больше одного, перебирать список и искать совпадение на и .

Теперь, если я использую ConcurrentList (или Set, если меня волнуют дубликаты - давайте пока проигнорируем), несколько потоков смогут добавить к нему, а затем вернуть его в кеш без гонки условия? Возможно ли, что Ehcache может вернуть два разных объекта списка в два потока, а затем, когда они добавят свое новое значение в список и попытаются вернуть его в кеш, я мог бы получить неопределенные результаты? Видите ли вы лучший способ создания этого кеша?

РЕДАКТИРОВАТЬ: Я ценю ответы ниже, но все, похоже, упускают из виду главное. Это сработает? Может ли Ehcache действительно возвращать два разных объекта для одного и того же cacheKey (скажем, если объект был на диске во время вызова и он сериализовал его дважды, по одному разу для каждого вызова).

7
задан Gandalf 11 November 2010 в 14:32
поделиться