Перейти к основному содержимому

Memcached против Redis

· 6 мин. чтения

1. Обзор

В этой статье мы рассмотрим сходства и различия двух популярных баз данных в памяти, Memcached и Redis .

2. Memcached и Redis

Часто мы думаем о кэшировании для повышения производительности при обработке большого объема данных.

Memcached — это система кэширования с распределенной памятью, разработанная для простоты и простоты использования и хорошо подходящая в качестве кэша или хранилища сеансов .

Redis — это хранилище структур данных в памяти, которое предлагает богатый набор функций. Он полезен в качестве кэша, базы данных, брокера сообщений и очереди .

3. Установка

3.1. Установка Memcached

Мы можем установить последний сервер Memcached , загрузив пакет и запустив make :

$ wget http://memcached.org/latest
$ tar -zxvf memcached-1.6.3.tar.gz
$ cd memcached-1.6.3
$ ./configure && make && make test && sudo make install

3.2. Установка Redis

Точно так же мы можем установить последний сервер Redis :

$ wget http://download.redis.io/releases/redis-5.0.8.tar.gz
$ tar xzf redis-5.0.8.tar.gz
$ cd redis-5.0.8
$ make

4. Сходства

4.1. Субмиллисекундная задержка

И Memcached, и Redis предлагают время отклика меньше миллисекунды, сохраняя данные в памяти.

4.2. Разделение данных

Точно так же обе базы данных в памяти позволяют распределять данные между несколькими узлами.

4.3. Поддержка языков программирования

Кроме того, оба поддерживают все основные языки программирования, включая Java, Python, JavaScript, C и Ruby.

Кроме того, для обеих баз данных в памяти доступно несколько клиентов Java. Например, Xmemcached и Memcached-java-client доступны для Memcached, а Jedis , Lettuce и Redisson — для Redis.

4.4. Очистка кэша

Memcached позволяет очистить кеш с помощью команды flush_all . Точно так же Redis позволяет нам удалять все из кеша с помощью таких команд, как FLUSHDB и FLUSHALL .

4.5. Масштабирование

Оба решения для кэширования предлагают высокую масштабируемость для обработки больших данных, когда спрос растет в геометрической прогрессии.

5. Отличия

5.1. Командная строка

Memcached позволяет нам запускать команды , подключаясь к серверу с помощью telnet:

$ telnet 10.2.3.4 5678
Trying 10.2.3.4...
Connected to 10.2.3.4.
$ stats
STAT pid 14868
STAT uptime 175931
STAT time 1220540125
// ...

В отличие от Memcached, Redis поставляется с выделенным интерфейсом командной строки, redis-cli , позволяющим нам выполнять команды :

$ redis-cli COMMAND
1) 1) "save"
2) (integer) 1
3) 1) "admin"
2) "noscript"
// ...
2) 1) "multi"
2) (integer) 1
3) 1) "noscript"
2) "fast"
// ...
3) 1) "geodist"
2) (integer) -4
3) 1) "readonly"
// ...

// ...

Здесь мы выполнили COMMAND , чтобы вывести список всех команд, предоставляемых Redis.

5.2. Сброс дискового ввода/вывода

Memcached обрабатывает дамп диска только с помощью сторонних инструментов, таких как libmemcached-tools, или ответвлений, таких как memcached-dd .

Однако Redis предоставляет легко настраиваемые механизмы по умолчанию, такие как RDB (файл базы данных Redis) или AOF (файлы только для добавления) для дампа диска. Это может быть полезно для архивации и восстановления.

Используя redis-cli, мы можем выполнить синхронную команду SAVE , чтобы сделать снимок данных в памяти:

$ redis-cli SAVE
OK

Здесь команда сохраняет моментальный снимок в двоичном файле dump.rdb и по завершении возвращает статус OK .

Однако выполнение асинхронного BGSAVE запускает фоновый процесс создания моментального снимка:

$ redis-cli BGSAVE
OK

Кроме того, мы можем использовать команду LASTSAVE для проверки времени Unix последнего успешного моментального снимка БД.

$ redis-cli LASTSAVE
(integer) 1410853592

5.3. Структуры данных

Memcached хранит пары ключ-значение в виде строки и имеет ограничение размера 1 МБ на значение. Однако Redis также поддерживает другие структуры данных, такие как list, set и hash, и может хранить значения размером до 512 МБ .

5.4. Репликация

Memcached поддерживает репликацию со сторонними ответвлениями, такими как repcached .

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

Во-первых, мы можем использовать команду REPLICAOF для создания реплики главного сервера Redis. Затем мы выполняем команду PSYNC на реплике, чтобы инициировать репликацию с мастера.

5.5. Транзакции

Memcached не поддерживает транзакции, хотя его операции атомарны.

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

Мы можем запустить транзакцию с помощью команды MULTI . Затем мы можем использовать команду EXEC для выполнения следующих последующих команд. Наконец, Redis предоставляет команду WATCH для условного выполнения транзакции.

5.6. Публикация и подписка на сообщения

Memcached не поддерживает публикацию/подписку на сообщения «из коробки».

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

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

Redis поставляется со специальными командами, такими как PUBLISH , SUBSCRIBE и UNSUBSCRIBE для публикации сообщения в канале, подписки и отмены подписки клиента на указанные каналы соответственно.

5.7. Геопространственная поддержка

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

Например, команда GEODIST вычисляет расстояние между двумя геопространственными элементами. Аналогично, команда GEORADIUS возвращает все записи в указанном радиусе.

Кроме того, мы можем использовать Spring Data Redis , чтобы включить геопространственную поддержку Redis в приложении Java.

5.8. Архитектура

Redis использует одно ядро и показывает лучшую производительность, чем Memcached, при хранении небольших наборов данных, если измерять количество ядер.

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

Еще одним преимуществом многопоточной архитектуры Memcached является ее высокая масштабируемость, достигаемая за счет использования нескольких вычислительных ресурсов.

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

5.9. LUA-скрипты

В отличие от Memcached, мы можем выполнять сценарии LUA для Redis. Он предоставляет такие команды, как EVAL и SCRIPT LOAD , полезные для выполнения сценариев LUA.

Например, мы можем выполнить команду EVAL для оценки скрипта:

$ redis-cli eval "return redis.call('set',KEYS[1],'foreach')" 1 website
OK

Здесь мы установили для ключевого веб -сайта значение foreach , оценив скрипт.

5.10. Использование памяти

Memcached имеет более высокий коэффициент использования памяти, чем Redis, при сравнении структуры данных String.

Несмотря на это, когда Redis использует хэш-структуру, он обеспечивает более высокую скорость использования памяти, чем Memcached.

6. Заключение

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

Существует множество доступных решений для кэширования в памяти. Поэтому мы должны учитывать особенности механизма кэширования и сопоставлять их с нашими вариантами использования.

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