Redis и Memcached: выбор подходящего механизма
Сравните Redis (сохранение данных, репликация, сортированные множества, публикация и подписка) с Memcached (простота, многопоточность) и выбирайте решение с учётом требований задачи.
«Redis и Memcached: выбор подходящего механизма» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.
Что такое Amazon ElastiCache
Amazon ElastiCache — это полностью управляемый сервис кэширования в памяти, который упрощает развёртывание, управление и масштабирование популярных хранилищ данных в памяти с открытым исходным кодом в облаке. Он поддерживает два движка: Redis и Memcached. Обслуживая часто запрашиваемые данные из памяти, а не из базы данных, ElastiCache может на порядки снизить нагрузку на базу данных и сократить задержку ответа с миллисекунд до микросекунд. Выбор между Redis и Memcached — распространённый вопрос на экзамене SAA-C03.
Memcached: простота превыше всего
Memcached — это распределённое хранилище «ключ-значение» в памяти, ориентированное на простоту и горизонтальную масштабируемость. Основные характеристики: многопоточность (может использовать все ядра CPU на одном узле), простое хранилище «ключ-значение» (только строки, без сложных структур данных), отсутствие сохранения данных (данные теряются при перезапуске узла), отсутствие репликации (нет резервного узла или реплик) и горизонтальное распределение с помощью согласованного хеширования на стороне клиента. Memcached — правильный выбор, если Вам нужен простой крупномасштабный кэш и не требуются сохранение данных, сложные типы данных или высокая доступность.
# Create a Memcached cluster with 3 nodes
aws elasticache create-cache-cluster \
--cache-cluster-id my-memcached \
--engine memcached \
--cache-node-type cache.r7g.large \
--num-cache-nodes 3 \
--cache-subnet-group-name my-subnet-group
# Memcached auto-discovers nodes via the config endpoint
# Application connects to: my-memcached.cfg.use1.cache.amazonaws.com:11211Redis: многофункциональное хранилище данных в памяти
Redis (Remote Dictionary Server) — это однопоточное (для каждого экземпляра), многофункциональное хранилище структур данных в памяти, поддерживающее строки, хеши, списки, множества, упорядоченные множества, растровые изображения, HyperLogLogs, потоки и геопространственные индексы. Основные преимущества по сравнению с Memcached: опциональное сохранение данных (AOF и снимки RDB), репликация (реплики для чтения и автоматическое переключение при сбое), обмен сообщениями pub/sub, скрипты Lua, транзакции (MULTI/EXEC) и режим кластера для горизонтального распределения. Redis — правильный выбор для большинства реальных сценариев кэширования.
# Redis data structure examples
# String
# SET user:1:name 'Alice'
# GET user:1:name
# Hash (object-like)
# HSET product:42 name 'Widget' price '9.99' stock '100'
# HGETALL product:42
# Sorted set (leaderboard)
# ZADD leaderboard 9500 'alice' 8700 'bob' 9100 'carol'
# ZREVRANGE leaderboard 0 2 WITHSCORES
# Pub/Sub
# PUBLISH notifications 'order_shipped:12345'
# SUBSCRIBE notificationsСохранение данных в Redis: AOF и RDB
Redis поддерживает два механизма сохранения данных: RDB (Redis Database) — периодические снимки состояния на определённый момент времени, сохраняемые на диск через настраиваемые интервалы (быстрые перезапуски, но возможна потеря данных между снимками). AOF (файл только для добавления) — журналирование каждой операции записи; при перезапуске Redis воспроизводит журнал, чтобы восстановить состояние (надёжность хранения достигается ценой увеличения размера файлов и замедления перезапусков). В ElastiCache можно Enable AOF, чтобы сохранять данные после перезапуска узлов. Это особенно важно, когда ElastiCache используется не только как кэш, но и как основное хранилище данных, например для данных сеансов.
# Create an ElastiCache Redis cluster with AOF enabled
aws elasticache create-replication-group \
--replication-group-id my-redis \
--replication-group-description 'Redis with persistence' \
--cache-node-type cache.r7g.large \
--engine redis \
--num-cache-clusters 2 \
--cache-parameter-group-name default.redis7 \
--snapshot-retention-limit 5
# Note: Enable AOF via parameter group: appendonly=yesРепликация Redis и автоматическое переключение при сбое
Redis поддерживает группы репликации с одним основным узлом, который обрабатывает все операции записи, и максимум пятью репликами для чтения, которые обрабатывают операции чтения. Если включены Multi-AZ и автоматическое переключение при сбое, ElastiCache автоматически назначает реплику для чтения основной при сбое основного узла — обычно переключение завершается менее чем за 60 секунд. Это обеспечивает приложениям на основе Redis высокую доступность, которой Memcached не может предложить (в Memcached нет репликации). Для рабочих приложений, которым требуется кэширование с высокой доступностью, всегда используйте Redis с автоматическим переключением при сбое.
# Create a Redis replication group with Multi-AZ failover
aws elasticache create-replication-group \
--replication-group-id prod-redis \
--description 'Production Redis with HA' \
--cache-node-type cache.r7g.xlarge \
--engine redis \
--multi-az-enabled \
--automatic-failover-enabled \
--num-cache-clusters 3 \
--cache-subnet-group-name multi-az-subnet-group
# 1 primary + 2 replicas across 3 AZsУпорядоченные множества Redis для таблиц лидеров
Упорядоченные множества — одна из самых мощных структур данных Redis. С каждым элементом связано число с плавающей точкой, а элементы всегда хранятся в упорядоченном виде. Поэтому упорядоченные множества идеально подходят для таблиц лидеров (ранжирование по баллам), очередей с приоритетом (сначала обрабатываются задачи с наивысшим приоритетом) и ограничения частоты запросов (скользящее окно, в котором метки времени используются как баллы). Все операции ZADD, ZRANGE, ZREVRANGE, ZRANK и ZRANGEBYSCORE выполняются за O(log n) — это чрезвычайно эффективно даже для миллионов записей.
# Leaderboard operations using Redis sorted sets
# Add/update scores
# ZADD game:leaderboard 10500 'player:alice'
# ZADD game:leaderboard 9800 'player:bob'
# ZADD game:leaderboard 11200 'player:carol'
# Get top 3 players (highest scores first)
# ZREVRANGE game:leaderboard 0 2 WITHSCORES
# Result: carol 11200, alice 10500, bob 9800
# Get a player's rank (0-indexed)
# ZREVRANK game:leaderboard 'player:alice'
# Result: 1 (second place)Pub/Sub Redis для обмена сообщениями
Pub/sub Redis позволяет издателям транслировать сообщения в каналы, не зная, кто на них подписан. Подписчики получают в реальном времени все сообщения, опубликованные в каналах, на которые они подписаны. Сообщения Pub/sub не сохраняются — если подписчик находится вне сети, он пропускает сообщение. Для постоянного обмена сообщениями с гарантированной доставкой используйте Redis Streams (более надёжную структуру данных, добавленную в Redis 5) или специализированный сервис обмена сообщениями, например SQS или SNS. На экзамене SAA-C03 Pub/sub Redis рассматривается как вариант для лёгких уведомлений между сервисами в реальном времени.
# Publisher side (broadcasts to 'notifications' channel)
# PUBLISH notifications '{"type":"order_shipped","orderId":"12345"}'
# Subscriber side (listens for messages)
# SUBSCRIBE notifications
# Pattern subscribe (wildcard channel matching)
# PSUBSCRIBE order:*
# Receives messages from: order:created, order:shipped, order:delivered
# Note: Unlike SQS, pub/sub is fire-and-forget — no acknowledgementMemcached и Redis: таблица выбора
Используйте следующие рекомендации при выборе на экзамене SAA-C03. Выбирайте Memcached, если Вам нужны: простой кэш без требования высокой доступности, многопоточная производительность и горизонтальное масштабирование за счёт добавления узлов (чистый кэш). Выбирайте Redis, если Вам нужны: сохранение данных (хранилище сеансов), репликация и переключение при сбое (высокая доступность), сложные типы данных (упорядоченные множества для таблиц лидеров, множества, списки), pub/sub, транзакции Lua или Cluster Mode для горизонтального масштабирования с несколькими сегментами. Если в вопросе экзамена упоминается какая-либо функция помимо простого кэширования «ключ-значение», почти всегда правильным ответом будет Redis.
Типы и семейства узлов кэша
ElastiCache предлагает несколько семейств типов узлов: r7g (Graviton 3, оптимизированы для работы с памятью — лучшее соотношение цены и производительности, рекомендуются для большинства задач кэширования), m7g (сбалансированные вычислительные ресурсы и память) и t4g (с возможностью кратковременного увеличения производительности, низкая стоимость для разработки и тестирования). Размеры узлов варьируются от cache.t4g.micro (500 MB) до cache.r7g.16xlarge (425 GB). Для рабочего окружения выбирайте размер узла, при котором набор данных помещается в память с запасом 20–25%. Нехватка памяти приводит к вытеснению данных (Memcached) или ошибкам OOM (Redis).
# Get available cache node types
aws elasticache describe-cache-engine-versions \
--engine redis \
--query 'CacheEngineVersions[?contains(EngineVersion, '7')].{Engine:Engine,Version:EngineVersion}'
# Check memory and vCPU for a node type
aws elasticache describe-cache-engine-versions \
--cache-parameter-group-family redis7
# Monitor evictions to detect memory pressure
# CloudWatch: Evictions metric > 0 means cache is fullБезопасность ElastiCache
ElastiCache развёртывается внутри Вашей VPC, а группы безопасности управляют доступом — по умолчанию доступ из общедоступного интернета отсутствует. Для Redis включите токены AUTH (пароль, который должны предоставить клиенты), шифрование при передаче (TLS) для соединений и шифрование при хранении с использованием KMS. Для Memcached доступно только шифрование при передаче по TLS (шифрование при хранении и AUTH недоступны). При переходе от незашифрованного Redis к зашифрованному миграция на месте невозможна — необходимо создать новый зашифрованный кластер и прогреть его.
# Create a Redis cluster with TLS and AUTH token
aws elasticache create-replication-group \
--replication-group-id secure-redis \
--description 'Encrypted Redis' \
--cache-node-type cache.r7g.large \
--engine redis \
--transit-encryption-enabled \
--at-rest-encryption-enabled \
--auth-token 'MySecretPassword123!'
# Store the AUTH token in Secrets Manager, not in your app codeПолитики вытеснения
Когда кэш Redis или Memcached заполнен, политика вытеснения определяет, какие ключи удалить, чтобы освободить место. Распространённые политики вытеснения Redis: noeviction (возвращает ошибку OOM — подходит, когда кэш является основным хранилищем), allkeys-lru (вытесняет давно не использовавшиеся ключи среди всех ключей — подходит для кэша общего назначения), volatile-lru (применяет LRU к ключам с установленным TTL — сохраняет ключи без срока действия), allkeys-random (случайное вытеснение), allkeys-lfu (вытесняет ключи, использовавшиеся реже всего). Для типичных сценариев кэширования рекомендуются allkeys-lru или allkeys-lfu.
# Set eviction policy via parameter group
aws elasticache create-cache-parameter-group \
--cache-parameter-group-name redis7-lru \
--cache-parameter-group-family redis7 \
--description 'LRU eviction policy'
aws elasticache modify-cache-parameter-group \
--cache-parameter-group-name redis7-lru \
--parameter-name-values ParameterName=maxmemory-policy,ParameterValue=allkeys-lru
# Apply the parameter group to your cluster:
aws elasticache modify-replication-group \
--replication-group-id prod-redis \
--cache-parameter-group-name redis7-lruБыстрая проверка
Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке Вы узнали, что Memcached прост, многопоточен и не поддерживает высокую доступность — он лучше всего подходит для чистого горизонтального масштабирования простых кэшей; Redis поддерживает сложные структуры данных, сохранение данных, pub/sub и переключение при сбое в Multi-AZ — он лучше всего подходит для большинства сценариев кэширования в рабочих окружениях; а упорядоченные множества делают Redis естественным выбором для таблиц лидеров и очередей с приоритетом. Далее мы рассмотрим группы репликации Redis и Cluster Mode для горизонтального распределения.
Часто задаваемые вопросы
Урок «Redis и Memcached: выбор подходящего механизма» бесплатный?
Да — полный текст урока «Redis и Memcached: выбор подходящего механизма» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.
Чему я научусь в уроке «Redis и Memcached: выбор подходящего механизма»?
Сравните Redis (сохранение данных, репликация, сортированные множества, публикация и подписка) с Memcached (простота, многопоточность) и выбирайте решение с учётом требований задачи. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AWS Solutions Architect?
Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Redis и Memcached: выбор подходящего механизма»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AWS Solutions Architect?
Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Redis и Memcached: выбор подходящего механизма
- Группы репликации ElastiCache Redis и кластерный режим
- Стратегии кэширования: отложенная загрузка и сквозная запись
- Хранение сеансов и шаблоны таблиц лидеров