Использование Redis для кэширования объектов Java: почему это должно быть лучше, чем ConcurrentHashMap?

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


person joanlofe    schedule 04.12.2013    source источник


Ответы (1)


ИМХО, ConcurrentHashMap - это подходящий кеш при условии

  • вам не нужен внешний доступ
  • общий размер кучи не слишком велик, например. 4ГБ
  • уровень параллелизма не более 20 процессоров (не только потоков)
  • у него есть нужный вам функционал.
  • ваша модель истечения срока действия очень проста.

Redis предназначен для гораздо большего, чем просто кеширование значений, и может совместно использоваться процессами, использующими разные языки, или даже доступ через командную строку.

person Peter Lawrey    schedule 04.12.2013