Redis (Remote Dictionary Service) — это хранилище данных на основе [[../../../../knowledge/dev/pc/Оперативная память|оперативной памяти]], построенное на архитектуре "[[../../dev/Key-Value хранилище|ключ-значение]]". Оно отличается высокой производительностью благодаря использованию IO multiplexing и однопоточному [[../../dev/architecture/Event Loop|event loop]], что позволяет эффективно обрабатывать запросы. Основная область применения Redis — это системы с требованиями к минимальной задержке и высокой скорости обработки данных.
Redis использует однопоточную модель выполнения с использованием multiplexing для работы с запросами, что обеспечивает простоту реализации и высокую производительность.
- [[../../dev/system-design/Redis Database Backup|RDB]] создание снимков базы данных через заданные промежутки времени
- [[../../dev/system-design/Append-Only File|AOF]] логирование каждой операции для минимизации потерь данных
Комбинированный подход RDB + AOF позволяет добиться как высокой производительности, так и надёжности. В случае катастрофы Redis сначала восстанавливает данные из последнего RDB-снапшота, а затем воспроизводит команды из AOF, чтобы восстановить данные до актуального состояния.
Реплики работают только в режиме чтения. Нужно на стороне клиента понять в какую реплику нужно писать ключ. При отправке запроса не в ту реплику, редис ответит ошибкой, указав хост, куда нужно отправить запрос.
Что если упадет один из мастеров? В таком случае кластер не обнаружит проблему и нас будут отправлять на несуществующий адрес.
Есть senitel. Который выступает оркестратором и прокси. Он сам будет отправлять запросы в нужную ноду. Он же будет отвечать за Failover?