6.2 KiB
aliases | tags | date | zero-link | linked | |||||
---|---|---|---|---|---|---|---|---|---|
|
|
|
|
Remote Dictionary Service (Redis) — это хранилище данных на основе ../../../../knowledge/dev/pc/Оперативная память (RAM) организованное по принципу "ключ-значение". Работает с использованием кооперативной многозадачности.
Особенности:
- Большое количество команд
- Можно запускать код на Lua. Но в урезаном режиме.
- Имеет сложные типы данны: списки, хеш-мапы
- Есть режимы подписки pub/sub.
- Однопоточный
- Написан на C
- Есть персистентный режим
- Кластеризуется
- Можно включить аутентификацию
- Есть транзакции
Недостатки:
- Сложный в настройках
Redis может использоваться в различных сценариях, как показано на диаграмме:
- Сессии: Redis может хранить данные пользовательских сессий для их совместного использования между разными сервисами.
- ../../dev/architecture/Кэширование: Использование Redis для кэширования объектов или страниц, особенно для данных с высокой частотой запросов.
- Распределённая блокировка: Redis может использоваться для установки блокировок между распределёнными сервисами, используя строковые значения.
- Счётчик: Можно использовать для подсчета, например, количества лайков или просмотров статей.
- Ограничитель частоты запросов: Redis позволяет устанавливать лимиты на частоту запросов для определённых IP-адресов пользователей.
- Генератор глобальных ID: Можно использовать Redis для генерации глобальных идентификаторов с помощью целочисленных значений.
- Корзина покупок: Redis Hash подходит для представления пар ключ-значение в корзине покупок.
- Расчет удержания пользователей: Bitmap можно использовать для ежедневного учета входов пользователей и расчета удержания.
- Очередь сообщений: Redis List можно использовать как очередь сообщений.
- Рейтинг: ZSet можно использовать для сортировки статей и формирования рейтингов.
- Доступ к данным в RAM как минимум в 1000 раз быстрее, чем произвольный доступ к данным на диске.
- Redis использует IO multiplexing и ../../dev/architecture/Event Loop для повышения эффективности работы.
- Кроме того, Redis задействует несколько эффективных низкоуровневых структур данных.
Кластеризация
Реплики работают только в режиме чтения. Нужно на стороне клиента понять в какую реплику нужно писать ключ. При отправке запроса не в ту реплику, редис ответит ошибкой, указав хост, куда нужно отправить запрос.
Что если упадет один из мастеров? В таком случае кластер не обнаружит проблему и нас будут отправлять на несуществующий адрес.
Есть senitel. Который выступает оркестратором и прокси. Он сам будет отправлять запросы в нужную ноду. Он же будет отвечать за Failover?
Заметки
Redis поддерживает одновременное использование как RDB, так и AOF. Это даёт возможность гибридного подхода:
-
../../dev/system-design/Redis Database Backup обеспечивает быстрые резервные копии и восстановление базы данных, снижая нагрузку на производительность.
-
../../dev/system-design/Append-Only File минимизирует вероятность потери данных, записывая каждую операцию. В случае катастрофы Redis сначала восстанавливает данные из последнего RDB-снапшота, а затем воспроизводит команды из AOF, чтобы восстановить данные до актуального состояния.
-
Порт по умолчанию 6379
-
Может работать с геолокациями
-
Показывает лучший результат производительности при использовании подписок, чем 00 RabbitMQ. Но при этом может страдать надежность доставки.