Redis или Ehcache?

Что лучше подходит для следующих условий:

  1. Настойчивость не принуждение.
  2. Должно потребоваться несколько серверов (с Ehcache требуется некоторая синхронизация кеша).
  3. Редко записывается и часто читается.
  4. Относительно небольшая база данных (очень небольшая потребность в памяти).

Я выплю, что у меня в голове сейчас. Возможно, я ошибаюсь.

Я знаю, что Redis требует отдельный сервер (?), А Ehcache обеспечивает локальный кеш, поэтому он должен быть быстрее, но будет реплицировать кеш на серверах (?). Обновление всех кешей после некоторого обновления на одном возможно с помощью Ehcache.

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

Заранее спасибо.

Ответ 1

Вы можете думать, что Redis является общей структурой данных, а Ehcache - блоком памяти, хранящим сериализованные объекты данных. Это основное различие.

Redis как общая структура данных означает, что вы можете поместить некоторую предопределенную структуру данных (например, String, List, Set и т.д.) На одном языке и получить ее на другом языке. Это полезно, если ваш проект многоязычен, например: Java - бэкэнд-сторона, а PHP - передняя. Вы можете использовать Redis для общего кеша. Но он может хранить только предопределенную структуру данных, вы не можете вставлять какие-либо объекты Java, которые вы хотите.

Если ваш проект - это только Java, то есть не многоязычный, Ehcache - удобное решение.

Ответ 2

У вас возникнут проблемы с масштабированием EhCache, и вам понадобятся ресурсы для управления им во время восстановления после сбоя и т.д. Преимущества Redis перед EhCache:

  1. Он использует проверенный временем протокол сплетен для обнаружения и синхронизации узлов.
  2. Доступность полностью управляемых сервисов, таких как AWS ElastiCache, Azure Redis Cache. Такие сервисы предлагают полную автоматизацию, поддержку и управление Redis, поэтому разработчики могут сосредоточиться на своих приложениях и не поддерживать свои базы данных.
  3. Правильная обработка большого объема памяти (все мы знаем, что Redis может управлять сотнями гигабайт оперативной памяти на одной машине). У него нет проблем с сборкой мусора, как Java.

И, наконец, существование дружественного Java-разработчика Redis-клиента - Redisson. Он предоставляет множество дружественных к Java объектов поверх Redis, например:

  • Задавать
  • ConcurrentMap
  • Список
  • Очередь
  • Deque
  • BlockingQueue
  • BlockingDeque
  • ReadWriteLock
  • семафор
  • Замок
  • AtomicLong
  • CountDownLatch
  • Опубликовать/Подписаться
  • ExecutorService
  • и многое другое...

Redisson поддерживает локальный кеш для структуры Map, что в 45 раз увеличивает производительность операций чтения.

Вот статья, описывающая опыт перехода компании Personal Capital с EhCache на Redis