Я немного новичок в Memcache и Redis, и я пытаюсь понять разницу между ними и тем, чем они являются на самом деле.
Как мне объяснили, Memcache - это решение для кэширования базы данных. Данные из часто выполняемых запросов кэшируются для повторного использования в более поздний момент, что ускоряет время ответа. Это точное описание?
А что насчет Redis? Это работает аналогичным образом? Другими словами, кэширует ли он данные, полученные из серверной базы данных? Я продолжаю читать, что Redis - это решение для хранилища ключевых значений, которое для меня больше похоже на замену сервера базы данных по сравнению с решением для кэширования db.
Любая помощь в понимании того, что каждый из них и в чем различия, будет принята с благодарностью.
Спасибо Брэд
Memcached - это хранилище ключей и значений в памяти. Redis можно использовать таким образом, но это гораздо больше.
Оба способны кэшировать результаты базы данных или все, что вы, возможно, захотите кэшировать.
Оба способны хранить простые строковые значения для ключа. В предыдущем ответе говорилось, что memcached более гибкий, и это неверно. Сохранение «всего, что вы хотите» в memcached включает в себя получение объектов и их сериализацию / маршалинг в строки. Redis поддерживает это одинаково хорошо. Redis, как правило, более гибок даже при хранении ваших сериализованных объектов, так как максимальный размер значения по умолчанию намного больше (1 МБ против 512 МБ).
Оба хранят значения в памяти и работают очень быстро и эффективно, часто ограничивая пропускную способность сети или ввод-вывод памяти без интенсивной загрузки ЦП. Оба являются хорошо масштабируемыми. Для обоих существуют отличные инструменты для управления и мониторинга. Коммерческие кластерные решения существуют для обоих. Начиная с версии 3.0, redis включает встроенную поддержку кластеризации, которую memcached не предлагает.
Практически каждый вариант использования memcached может быть решен с помощью redis одинаково хорошо, а иногда и лучше. Memcached - фантастическая программа, но ее возможности и сильные стороны стали частью Redis.
Они отличаются большим количеством дополнительных функций, которые предлагает Redis, и дополнительными вариантами использования, которые эти функции обеспечивают.
Redis - это больше, чем хранилище ключей / значений. Это сервер структуры данных в памяти. Ключам можно назначать простые строки, как в memcached, но они также могут хранить хэши, списки, наборы или отсортированные наборы. Эти дополнительные типы данных эффективны и оптимизированы, с много команд для их использования, включение шаблонов доступа, которые не предлагает простое хранилище ключей / значений.
Redis предлагает упорство, встроен и включен по умолчанию. Это означает, что redis по умолчанию является реальной базой данных, а не простым изменчивым кешем, таким как memcached. Ваши данные будут там после перезагрузки. Существует множество простых параметров администрирования, которые вы можете использовать, чтобы настроить постоянство для наилучшего решения вашего варианта использования или отключить его, если вам нужен только изменчивый кеш.
Redis предлагает pub / sub (Опубликовать / подписаться). Это позволяет вам создавать каналы и подписывать на них одного или нескольких клиентов, обеспечивая эффективный высокоскоростной механизм связи в реальном времени. Это может быть отличным решением для взаимодействия между процессами, приложениями или серверами.
Redis предлагает Поддержка сценариев Lua. Это позволяет вам делать множество новых вещей. Одним из важных примеров может быть выполнение нескольких зависимых команд redis атомарно и с одним вызовом redis. Сценарии Lua легко подобрать, и они выполняются эффективно и атомарно.
Если ваш проект уже не использует memcached или ваша организация не вложила значительные средства в memcached, вам не следует его использовать. Redis конкурирует с memcached в своей собственной игре и открывает целый мир новых. Даже если ваша проблема может быть решена одинаково с помощью обоих инструментов, используйте инструмент, который обеспечивает большую гибкость для проблем, которые вы еще не можете предвидеть: redis. Вы также будете выбирать инструмент, который более активно разрабатывается и обслуживается и который улучшается быстрее. Memcached никуда не денется и не должен, но трудно обосновать его использование в чем-то новом, если у вас нет значительных знаний или инвестиций в инфраструктуру memcached.
Если вы уже используете memcached, переход на redis может оказаться трудоемким и практически безрезультатным. Тщательно оцените redis и решите для вашей ситуации, перевешивают ли затраты на переход на него выгоды. Если это так, придерживайтесь memcached. Это по-прежнему отличная, стабильная, надежная программа.
Между ними действительно есть одно ключевое различие.
Обоих можно манипулировать для кеширования всего, что вы хотите им бросить. Конечная цель любой из этих систем и многих других подобных систем - предоставить распределенный кеш в памяти для более быстрого хранения любых данных, к которым вам нужен доступ. Это по существу превращает базу данных в простой репозиторий данных для постоянного и долгосрочного хранения, в то время как механизм кеширования в памяти разгружает и перемещает как можно больше данных на внешний интерфейс стека, тем самым сокращая задержку и время для извлечения данные.
Как вы отметили, Redis на самом деле предназначен только для кэширования ключей и значений, однако я видел целые объекты, хранящиеся раньше. Однако он хорошо подходит для повышения производительности базы данных.
Memcached немного более гибкий в том смысле, что он может хранить практически все, что вы хотите. Он также является одним из главных претендентов на участие в любом приложении кэширования распределенной памяти. Есть и другие системы, которые тоже так делают.
В любом случае необходимо написать программное обеспечение для загрузки любого из этих двух кешей. Некоторое существующее программное обеспечение может существовать для любых целей, которые вы имеете в виду, например, для загрузки таблицы в память, но они будут индивидуальными для каждого случая.