digital-garden/meta/zero/00 Redis.md

70 lines
6.5 KiB
Markdown
Raw Normal View History

2024-11-03 22:27:39 +03:00
---
2024-11-24 20:43:38 +03:00
aliases:
- Redis
2024-11-03 22:27:39 +03:00
tags:
- maturity/🌱
date:
- - 2024-05-23
zero-link:
2024-11-24 10:17:46 +03:00
- "[[../../dev/Key-Value хранилище|Key-Value хранилище]]"
2024-11-03 22:27:39 +03:00
linked:
- "[[Memcached]]"
---
2024-11-24 20:43:38 +03:00
Redis (Remote Dictionary Service) — это хранилище данных на основе [[../../../../knowledge/dev/pc/Оперативная память|оперативной памяти]], построенное на архитектуре "[[../../dev/Key-Value хранилище|ключ-значение]]". Оно отличается высокой производительностью благодаря использованию IO multiplexing и однопоточному [[../../dev/architecture/Event Loop|event loop]], что позволяет эффективно обрабатывать запросы. Основная область применения Redis — это системы с требованиями к минимальной задержке и высокой скорости обработки данных.
Redis использует однопоточную модель выполнения с использованием multiplexing для работы с запросами, что обеспечивает простоту реализации и высокую производительность.
2024-11-03 22:27:39 +03:00
2024-11-27 09:30:43 +03:00
- [[../../dev/database/redis/Конфигурация Redis|Конфигурация Redis]]
- [[../../dev/database/redis/Команды Redis-cli|Команды Redis-cli]]
2024-11-03 22:27:39 +03:00
Особенности:
- Большое количество команд
- Можно запускать код на Lua. Но в урезаном режиме.
- Имеет сложные типы данны: списки, хеш-мапы
- Есть режимы подписки pub/sub.
- Однопоточный
- Написан на C
- Есть персистентный режим
- Кластеризуется
- Можно включить аутентификацию
- Есть транзакции
2024-11-24 20:43:38 +03:00
**Преимущества
- Высокая скорость доступа к данным благодаря оперативной памяти.
- Поддержка сложных структур данных.
- Простота интеграции и использования через CLI и клиентские библиотеки.
2024-11-03 22:27:39 +03:00
**Недостатки:**
2024-11-24 20:43:38 +03:00
- Сложность настройки и управления кластером.
- Ограниченная надёжность в режиме pub/sub по сравнению с другими системами (например, RabbitMQ).
- Использование оперативной памяти ограничивает объём хранимых данных.
2024-11-03 22:27:39 +03:00
2024-11-24 20:43:38 +03:00
Redis может использоваться в различных сценариях:
- [[../../dev/architecture/Кэширование|Кэширование]]: ускорение обработки данных с частым доступом.
- **Управление сессиями**: хранение данных сессий пользователей.
- Распределённая [[../../dev/fundamental/Блокировка|блокировка]]: установка блокировок между сервисами.
- **Очереди сообщений**: управление сообщениями с использованием структур данных (списки, потоки).
- **Подсчёт данных**: подсчёт просмотров, лайков.
2024-11-03 22:27:39 +03:00
- **Ограничитель частоты запросов**: Redis позволяет устанавливать лимиты на частоту запросов для определённых IP-адресов пользователей.
2024-11-24 20:43:38 +03:00
- **Рейтинги и сортировки**: с помощью сортированных множеств (ZSet).
2024-11-03 22:27:39 +03:00
- **Генератор глобальных ID**: Можно использовать Redis для генерации глобальных идентификаторов с помощью целочисленных значений.
![[../files/images/Pasted image 20241103034136.png]]
- Доступ к данным в RAM как минимум в 1000 раз быстрее, чем произвольный доступ к данным на диске.
- Redis использует IO multiplexing и [[../../dev/architecture/Event Loop|single-threaded execution loop]] для повышения эффективности работы.
- Кроме того, Redis задействует несколько эффективных низкоуровневых структур данных.
2024-11-24 20:43:38 +03:00
Redis поддерживает два типа сохранения данных.
2024-11-27 09:30:43 +03:00
- [[../../dev/database/redis/Redis Database Backup|RDB]] создание снимков базы данных через заданные промежутки времени
- [[../../dev/database/redis/Append-Only File|AOF]] логирование каждой операции для минимизации потерь данных
2024-11-24 20:43:38 +03:00
Комбинированный подход RDB + AOF позволяет добиться как высокой производительности, так и надёжности. В случае катастрофы Redis сначала восстанавливает данные из последнего RDB-снапшота, а затем воспроизводит команды из AOF, чтобы восстановить данные до актуального состояния.
2024-11-03 22:27:39 +03:00
## Кластеризация
Реплики работают только в режиме чтения. Нужно на стороне клиента понять в какую реплику нужно писать ключ. При отправке запроса не в ту реплику, редис ответит ошибкой, указав хост, куда нужно отправить запрос.
Что если упадет один из мастеров? В таком случае кластер не обнаружит проблему и нас будут отправлять на несуществующий адрес.
Есть senitel. Который выступает оркестратором и прокси. Он сам будет отправлять запросы в нужную ноду. Он же будет отвечать за Failover?
## Заметки
- Порт по умолчанию 6379
2024-11-24 20:43:38 +03:00
- Может работать с геолокациями