Ehcache & MultiThreading
Поддерживает ли ehcache многопоточность по умолчанию или требует каких-либо изменений конфигурации?
В многопоточном приложении моего приложения с Ehcache я обнаружил, что количество ударов по БД на самом деле увеличивается, т.е. Глобальный кеш недоступен для всех потоков, несмотря на то, что мой кеш - все синглтоны. Любые предложения?
Ответы
Ответ 1
Это может помочь ответить на ваш вопрос: FAQ:
Безопасно ли потоковое изменение значений элемента после извлечения из кэша?
Помните, что значение в элементе кэша доступно глобально из нескольких потоков. По сути, это не является потокобезопасным для изменения значения. Безопаснее получить значение, удалить элемент кэша, а затем снова вставить значение.
(выделено мной мной)
Ответ 2
Из официальная документация появляется, что она специально построена и протестирована для обеспечения наилучшей поддержки при одновременном доступе до тех пор, пока вы не изменяете Element
из нескольких потоков.
Но, конечно, это не означает, что использование Ehcache делает другие части вашего кода безопасными. Если вы получаете одно и то же значение из нескольких потоков (используя один и тот же ключ), экземпляр может быть общим, и вам необходимо знать, что вы делаете, прежде чем изменять его. Кажется, что лучше использовать неизменяемые объекты, такие как строки, как кешированные значения.