



В основном я использую EhCache, потому что раньше он был поставщиком кеша по умолчанию для Hibernate. На Java-Source.net есть список решений для кеширования.
Раньше у меня была ссылка, по которой сравнивались основные решения для кеширования. Если найду, обновлю этот ответ.
Это оба довольно солидные проекты. Если у вас довольно простые потребности в кешировании, любой из них, вероятно, будет работать так же хорошо, как и другой.
Вы также можете рассмотреть возможность фильтрации запроса к базе данных, если это возможно. Часто использование настроенного запроса, который возвращает меньший набор результатов, дает лучшую производительность, чем загрузка 500 000 строк в память с последующей их фильтрацией.
Это вроде как зависит от ваших потребностей. Если вы выполняете работу с памятью на одной машине, то ehcache будет работать отлично, если у вас достаточно оперативной памяти или достаточно быстрого жесткого диска, чтобы переполнение не приводило к подкачке / перегрузке диска. Если вы обнаружите, что вам нужно добиться масштабируемости, даже несмотря на то, что эта конкретная операция выполняется часто, тогда вы, вероятно, захотите выполнить кластеризацию. JGroups / TreeCache от JBoss поддерживают это, как и EHcache (я думаю), и я знаю, что это определенно работает, если вы используете Ehcache с терракотовым покрытием, что является очень хорошей интеграцией. Этот ответ не говорит напрямую о достоинствах EHcache и OSCache, поэтому вот этот ответ: EHcache, похоже, имеет наибольшую инерцию (раньше это была стандартная, хорошо известная, активная разработка, включая новый сервер кеширования), а OSCache казался (по крайней мере, в одном месте), чтобы иметь немного больше функций, но я думаю, что с вариантами, упомянутыми выше, эти преимущества спорны / отменены. Ах, еще я забыл упомянуть, что транзакционность данных важна, и ваши требования уточнят список допустимых вариантов.
Я использовал JCS (http://jakarta.apache.org/jcs/), и он кажется надежным и простым в использовании программно.
В любом случае я рекомендую использовать их с модулями Spring. Кэш может быть прозрачным для приложения, а его реализации легко менять местами. Помимо OSCache и EHCache, модули Spring также поддерживают кеш Gigaspaces и JBoss.
Что касается сравнений .... OSCache проще настроить EHCache имеет больше параметров конфигурации
Оба они надежны, оба поддерживают зеркальный кеш, оба работают с Terracotta, оба поддерживают кэширование в памяти и на диск.
В других ответах обсуждаются плюсы и минусы кешей; но мне интересно, действительно ли вы получаете выгоду от кеширования. Не совсем ясно, что именно вы планируете здесь делать и почему кеш будет полезен: если у вас есть набор данных для использования, просто откройте его. Кэш только помогает повторно использовать вещи между независимыми в остальном задачами. Если это то, что вы делаете, да, кеширование может помочь. Но если это большая задача, которая может нести свой набор данных, кеширование не принесет никакой пользы.
Судя по их страница релизов, OSCache не поддерживается активно с 2007 года. Это нехорошо. С другой стороны, EhCache находится в постоянном развитии. Только по этой причине я бы выбрал EhCache.
Редактировать ноябрь 2013 г .: OSCache, как и остальная часть OpenSymphony, мертв.
+1 Это очень важный фактор при принятии решения, какое программное обеспечение с открытым исходным кодом использовать.
Я использовал oscache в нескольких весенних проектах с пружинными модулями, используя конфигурацию на основе aop.
Недавно я попытался использовать модули oscache + spring в проекте Spring 3.x, но обнаружил, что кэширование на основе аннотаций spring-modules не поддерживается (даже вилкой).
Я недавно узнал об этом проекте -
http://code.google.com/p/ehcache-spring-annotations/
Что поддерживает Spring 3.x с декларативным кешированием на основе аннотаций с использованием ehcache.
Выберите кеш, соответствующий JSR 107, что упростит вашу работу, если вы захотите перейти от одной реализации к другой. Чтобы быть конкретным, перейдите к Ehcache, который является более популярным и широко используемым решением для кэширования Java. Мы широко используем Ehcache, и он нам подходит.
OSCache практически мертв, так как был заброшен несколько лет назад. Вы можете взглянуть на Cacheonix, он активно развивается, и мы только что выпустили версию 2.2.2 с поддержкой кэширования на веб-уровне. Я коммиттер, так что вы можете связаться с нами, если у вас возникнут какие-либо вопросы.
Как вы думаете, почему использование кеша будет быстрее, чем выбор / фильтрация в базе данных? Вот что они делают. :)