Недавно мы начали использовать EHCache с Terracotta для запуска распределенного кэша данных для данных приложений.Скажем, у любого клиентского узла есть около 2 ГБ для их кучи, тогда как у серверных узлов есть 8 ГБ.Мы генерируем много данных, около 1,5 ГБ в день.
Как правило, любой клиент будет использовать набор данных конкретного дня (около 1,5 ГБ), но сервер, очевидно, должен содержать все из них.
Способ, которым я хотел бы, чтобы выдох работал, основан на LRU, когда куча становится большой.Поэтому, если какой-либо конкретный кэш на стороне клиента L1 станет слишком большим (скажем, при переключении с дня 1 на день 2), я ожидаю, что он вытеснит из L1 все данные дня 1.Если L2 становится слишком большим, когда мы получаем 6-й набор данных, то у самого старого набора данных срок действия истекает полностью.У меня нет никакого мнения о том, какими должны быть значения времени жизни или простоя, поэтому я оставляю их неустановленными.
После нескольких дней просмотра я не наденуне думаю, что это работает, как я ожидал.Например, я выполнил тест с элементами L2 max 4. Я заполнил его четырьмя элементами.Затем я пошел, чтобы поставить пятый элемент.Cache.put () возвратился без исключений, но сразу после Cache.get () с тем же ключом вернул ноль!
Поэтому мой вопрос: как заставить EHCache + Terracotta делать то, что я хочу, илихоть что-то близкое?