Redis или Ehcache?
Что лучше подходит для следующих условий:
- Настойчивость не принуждение.
- Должно потребоваться несколько серверов (с Ehcache требуется некоторая синхронизация кеша).
- Редко записывается и часто читается.
- Относительно небольшая база данных (очень небольшая потребность в памяти).
Я выплю, что у меня в голове сейчас. Возможно, я ошибаюсь.
Я знаю, что Redis требует отдельный сервер (?), А Ehcache обеспечивает локальный кеш, поэтому он должен быть быстрее, но будет реплицировать кеш на серверах (?). Обновление всех кешей после некоторого обновления на одном возможно с помощью Ehcache.
Мой вопрос в том, что лучше подходит для окружающей среды, о которой я упоминал?
Чья производительность будет лучше или каковы сценарии, когда кто-то может опередить другого?
Заранее спасибо.
Ответы
Ответ 1
Вы можете думать, что Redis является общей структурой данных, а Ehcache - блоком памяти, хранящим сериализованные объекты данных. Это основное различие.
Redis как общая структура данных означает, что вы можете поместить некоторую предопределенную структуру данных (например, String, List, Set и т.д.) На одном языке и получить ее на другом языке. Это полезно, если ваш проект многоязычен, например: Java - бэкэнд-сторона, а PHP - передняя. Вы можете использовать Redis для общего кеша. Но он может хранить только предопределенную структуру данных, вы не можете вставлять какие-либо объекты Java, которые вы хотите.
Если ваш проект - это только Java, то есть не многоязычный, Ehcache - удобное решение.
Ответ 2
У вас возникнут проблемы с масштабированием EhCache, и вам понадобятся ресурсы для управления им во время восстановления после сбоя и т.д. Преимущества Redis перед EhCache:
- Он использует проверенный временем протокол сплетен для обнаружения и синхронизации узлов.
- Доступность полностью управляемых сервисов, таких как AWS ElastiCache, Azure Redis Cache. Такие сервисы предлагают полную автоматизацию, поддержку и управление Redis, поэтому разработчики могут сосредоточиться на своих приложениях и не поддерживать свои базы данных.
- Правильная обработка большого объема памяти (все мы знаем, что Redis может управлять сотнями гигабайт оперативной памяти на одной машине). У него нет проблем с сборкой мусора, как Java.
И, наконец, существование дружественного Java-разработчика Redis-клиента - Redisson. Он предоставляет множество дружественных к Java объектов поверх Redis, например:
- Задавать
- ConcurrentMap
- Список
- Очередь
- Deque
- BlockingQueue
- BlockingDeque
- ReadWriteLock
- семафор
- Замок
- AtomicLong
- CountDownLatch
- Опубликовать/Подписаться
- ExecutorService
- и многое другое...
Redisson поддерживает локальный кеш для структуры Map, что в 45 раз увеличивает производительность операций чтения.
Вот статья, описывающая опыт перехода компании Personal Capital с EhCache на Redis