Является ли memcached динозавром по сравнению с Redis? [закрыто]

185

Последние несколько недель я работал с memcached и только что узнал о Redis. Когда я прочитал эту часть их readme, у меня внезапно возникло теплое, уютное чувство в желудке:

Redis можно использовать в качестве memcached на стероидах, потому что он такой же быстрый, как memcached, но с большим количеством функций. Как и memcached, Redis также поддерживает установку тайм-аутов для клавиш, так что эта клавиша будет автоматически удаляться по истечении заданного промежутка времени.

Это звучит потрясающе. Я также нашел эту страницу с тестами: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

Итак, честно - действительно ли memcache - это тот старый динозавр, который является плохим выбором с точки зрения производительности по сравнению с этим новичком по имени Redis?

Я не много слышал о Redis ранее, таким образом, подход к моему вопросу!

промышленные
источник
Интересное дополнительное чтение: nosql.mypopescu.com/post/519078332/memcached-on-top-of-redis
Industrial
9
этот эталонный тест на рурурадж не стоит особого внимания
dsomnus
2
Мы начали экспериментировать с Membase на работе, и счастливы до сих пор. Тем не менее, мы пришли из Memcache, так что замена была хорошим плюсом: membase.org
jayshao
2
Redis так же быстр, как memcached для нереальных надуманных тестов. Это не значит, что он медленный - он, безусловно, достаточно быстр для большинства рабочих нагрузок, но более быстрые, чем memcached, выявляют только ошибки в memcached. Это почти всегда узкое место из-за аппаратного обеспечения или плохого дизайна приложения.
Дастин
4
Я удивлен, что санкт-патруль не закрыл этот вопрос как неуместный и бесполезный.
Dogweather

Ответы:

74

Memcache является отличным инструментом, все еще и очень надежным.

вместо того, чтобы смотреть на эту проблему с точки зрения снижения скорости работы в диапазоне <100 мс, посмотрите на производительность на «класс» программного обеспечения.

  • Используется ли только локальный баран? -> самый быстрый
  • Использует ли он удаленный оперативной памяти? -> быстро
  • Использует ли он оперативную память плюс жесткий диск -> о, блин.
  • Использует ли он только жесткий диск -> запустить!
Даниил
источник
3
Нет никакой возможности обрабатывать репликацию с помощью memcache, о которой я знаю. Memcache - это просто кеш. Если элемент очищен / потерян, его необходимо восстановить. Я не использовал это раньше и не оценивал, но это может вас заинтересовать. code.google.com/p/memagent
Даниэль
1
Membase поддерживает протокол memcached, а также постоянство и репликацию.
Джим Ферранс
1
Недавно я увидел объединенный Ethernet через 4 порта. 4 х 44 МБ / с. Это делает оперативную память еще более ценной, если предположить, что вы можете подключить Ethernet!
Даниэль
1
Ради дальнейшего использования Facebook недавно открыл mcrouter с открытым исходным кодом, который добавляет репликацию в memcached. Другие вещи также датированы (redis сейчас очень быстрый и т. Д.), Но, к вашему сведению, если вы здесь через пять лет ...
dannysauer
ну какой смысл? оба не могут хранить простой директивный массив json, наиболее широко используемый формат обмена данными в Интернете, я понятия не имею, о чем они думают ... о, подождите, может быть, мне стоит добавить ReJSON, потому что изначально никто не заботится о JSON в мире правильно
PirateApp
205

Зависит от того, что вам нужно, в общем, я думаю, что:

  • Вы не должны заботиться о выступлениях. Redis быстрее на ядро ​​с небольшими значениями, но memcached может использовать несколько ядер с одним исполняемым файлом и портом TCP без помощи клиента. Кроме того, memcached быстрее с большими значениями порядка 100 КБ. Redis недавно значительно улучшил работу с большими значениями (нестабильная ветвь), но все же memcached быстрее в этом случае. Суть в следующем: ни то, ни другое, скорее всего, не станет вашим узким местом для запроса в секунду, который они могут доставить.
  • Вы должны заботиться об использовании памяти. Для простых пар ключ-значение memcached более эффективно использует память. Если вы используете хэши Redis, Redis более эффективно использует память. Зависит от варианта использования.
  • Вы должны заботиться о постоянстве и репликации, две функции доступны только в Redis. Даже если ваша цель состоит в том, чтобы создать кеш, это помогает, что после обновления или перезагрузки ваши данные все еще там.
  • Вы должны заботиться о том, какие операции вам нужны. В Redis есть много сложных операций, даже если учитывать только случай использования кэширования, вы часто можете сделать гораздо больше за одну операцию, не требуя обработки данных на стороне клиента (иногда требуется много операций ввода-вывода). Эти операции часто выполняются так же быстро, как простые GET и SET. Поэтому, если вам нужен не просто GET / SET, а более сложные вещи, Redis может сильно помочь (подумайте о кэшировании на временной шкале).

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

PS Конечно, я могу быть предвзятым, так как я ведущий разработчик проекта Redis.

antirez
источник
67
+1 за отличное раскрытие в конце
NateDSaint
6
Я не уверен, является ли это языковой ошибкой, но если вы приводите свой аргумент «в общем, я думаю, что вы не должны слишком заботиться о производительности», это серьезная причина для беспокойства. Redis может быть очень полезен для некоторых классов проблем, но традиционно memcache используется специально для решения проблем производительности с постоянными базами данных. Я также думаю, что явное упущение в вашем списке - зрелость продукта. Memcache - это зрелый продукт с десятилетним опытом. Redis является многообещающим, но существует уже около 3 лет.
DougW
1
@DougW Вы берете эту фразу из контекста. Это имеет гораздо больше смысла, когда вы читаете фразу, закрывающую абзац сразу после: «Суть в следующем: ни то, ни другое, скорее всего, не станет вашим узким местом для запроса в секунду, который они могут доставить»
Диней
83

Итак, честно - действительно ли memcache - это тот старый динозавр, который является плохим выбором с точки зрения производительности по сравнению с этим новичком по имени Redis?

  • Сравнение набора функций Redisимеет гораздо больше функциональности;
  • Сравнение простоты установки Redisтакже намного проще. Не требуется никаких зависимостей;
  • Сравнение активного развития Redisтакже лучше;
  • Я считаю, memcachedчто это немного быстрее, чем Redis. Это не касается диска вообще;
  • Мое мнение, что Redisэто лучший продукт, чем memcached.
Альфред
источник
31
Redis касается только диска, если вы скажете это. Обычно он выполняет fsync каждую секунду или около того -> вы этого не заметите
Марк Сигер
1
@ Марк да. Я также верю, что вы можете сказать, чтобы он вообще не трогал диск, но стандарт, я считаю, это всегда fsyncs прямо сейчас?
Альфред
3
Кроме того, по моему опыту, Redis немного быстрее, чем Memcached (при использовании Redis в режиме только памяти). Антирез сделал здесь тест antirez.com/post/redis-memcached-benchmark.html
Sune Rievers
10
БОЛЬШАЯ РАЗНИЦА: Memcached является многопоточным, а Redis - нет. Таким образом, хотя задержка одного запроса сопоставима, Memcached может обслуживать гораздо больше запросов при высоком уровне параллелизма. Redis, с другой стороны, достигнет своего пика производительности только с несколькими параллельными запросами, поскольку он использует только 1 ядро ​​/ поток процессора. Предлагаемый способ обойти это - запустить несколько экземпляров Redis на одной машине с постоянным хэшированием, но это действительно плохое решение. Так что если вам нужен высокий параллелизм и многоядерный процессор (а кто нет), Memcached НАМНОГО быстрее.
ColinM
2
@ Альфред, это не скрытый факт, что Redis является однопоточным, это дизайнерское решение (простота над надежностью) автора. Статья Дастина, на которую ссылаются выше, является убедительным доказательством того, что она оказывает реальное влияние. Также я подтвердил это в моих собственных тестах, используя Redis в качестве бэкэнда Zend_Cache; по мере увеличения параллелизма Redis будет довольно быстро плато по сравнению с memcached.
ColinM
46

То, что делает memcached, чего не делает Redis, - это самое недавнее изгнание значений из кэша. С memcached вы можете безопасно установить столько значений, сколько захотите, и когда они переполняют память, те, которые вы не использовали в последнее время, будут удалены. С Redis вы можете только приблизить это, установив тайм-аут на все; когда ему нужно освободить память, он посмотрит на три случайных ключа и удалит тот, который ближе всего к сроку действия.

Это главное отличие, если вы просто используете его как кеш.

Питер Скотт
источник
27
См. Antirez.com/post/redis-as-LRU-cache.html
Альфред,
13

Вы также можете посмотреть на Membase.

http://www.northscale.com/products/membase_server.html

Я не использовал его, но, похоже, он похож на Redis в том, что это хранилище KV, ориентированное на память, с постоянством. Основные отличия от того, что я вижу:

  • Redis имеет значительно больше возможностей манипулирования данными (упорядоченные наборы и т. Д.)
  • Redis имеет ожидающий проект Redis Cluster, чтобы добавить горизонтальную масштабируемость
  • Redis имеет один уровень разгрузки данных на диск (ВМ) на основе гибридного алгоритма, который учитывает как LRU, так и размер объекта.

  • Membase использует проводной протокол memcached - полезен в качестве пути обновления для существующих приложений

  • Membase настроен на горизонтальное масштабирование с использованием распределенного подхода с хэш-таблицей
  • Membase может поддерживать несколько уровней разгрузки данных с использованием подхода LRU (очень редко используется для перехода на диск, довольно редко - для SSD, часто - для оперативной памяти)
  • Не уверен насчет возможностей TTL в Membase.

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

HikeOnPast
источник
Привет, Дин, спасибо за твой пост. Я обязательно проверю это. Могу ли я использовать Membase в PHP?
Промышленный
4
Поскольку Membase использует протокол memcached, любой из клиентов memcached должен работать: wiki.membase.org/bin/view/Main/Clients
HikeOnPast,
Membase поддерживает TTL. Все реализации Memcache поддерживают путы со сроком действия. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Саурав,
0

Hazelcast изначально поддерживает протокол memcached

https://web.archive.org/web/20140601010929/http://hazelcast.org/docs/latest/manual/html-single/hazelcast-documentation.html

и, таким образом, является современной альтернативой memcached. Вы должны попробовать все решения, чтобы увидеть, что работает лучше для вас.

Мико Мацумура
источник