При профилировании разрабатываемого в настоящее время Java-приложения мы обнаружили несколько узких мест, от которых можно избавиться с помощью кэширования. Приложение обрабатывает запросы, и оно должно выполняться как можно быстрее. Мы рассматриваем Redis как решение для кэширования, потому что уже используем его в приложении. В основном мы должны кэшировать объекты Java. С Redis мы должны сериализовать/десериализовать эти объекты + накладные расходы сети. Учитывая, что в основном Redis является хранилищем ключевых значений, мне было интересно, может быть, более эффективно использовать ConcurrentHashMap вместо Redis, так как это избавит нас от сериализации и сетевых накладных расходов. Однако, поискав в Интернете, я не смог найти никого, кто использовал бы его для этой цели. Я что-то упускаю? Каков практический предел ConcurrentHashMap для этих целей (с точки зрения одновременных запросов и объема кэшированных данных)?
Использование Redis для кэширования объектов Java: почему это должно быть лучше, чем ConcurrentHashMap?
Ответы (1)
ИМХО, ConcurrentHashMap - это подходящий кеш при условии
- вам не нужен внешний доступ
- общий размер кучи не слишком велик, например. 4ГБ
- уровень параллелизма не более 20 процессоров (не только потоков)
- у него есть нужный вам функционал.
- ваша модель истечения срока действия очень проста.
Redis предназначен для гораздо большего, чем просто кеширование значений, и может совместно использоваться процессами, использующими разные языки, или даже доступ через командную строку.
person
Peter Lawrey
schedule
04.12.2013