digital-garden/meta/zero/00 Redis.md
Struchkov Mark 7d78047f43
All checks were successful
continuous-integration/drone/push Build is passing
Обновление
2024-11-27 09:30:43 +03:00

6.5 KiB
Raw Blame History

aliases tags date zero-link linked
Redis
maturity/🌱
2024-05-23
../../dev/Key-Value хранилище
Memcached

Redis (Remote Dictionary Service) — это хранилище данных на основе ../../../../knowledge/dev/pc/Оперативная память, построенное на архитектуре "../../dev/Key-Value хранилище". Оно отличается высокой производительностью благодаря использованию IO multiplexing и однопоточному ../../dev/architecture/Event Loop, что позволяет эффективно обрабатывать запросы. Основная область применения Redis — это системы с требованиями к минимальной задержке и высокой скорости обработки данных.

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

Особенности:

  • Большое количество команд
  • Можно запускать код на Lua. Но в урезаном режиме.
  • Имеет сложные типы данны: списки, хеш-мапы
  • Есть режимы подписки pub/sub.
  • Однопоточный
  • Написан на C
  • Есть персистентный режим
  • Кластеризуется
  • Можно включить аутентификацию
  • Есть транзакции

**Преимущества

  • Высокая скорость доступа к данным благодаря оперативной памяти.
  • Поддержка сложных структур данных.
  • Простота интеграции и использования через CLI и клиентские библиотеки.

Недостатки:

  • Сложность настройки и управления кластером.
  • Ограниченная надёжность в режиме pub/sub по сравнению с другими системами (например, RabbitMQ).
  • Использование оперативной памяти ограничивает объём хранимых данных.

Redis может использоваться в различных сценариях:

  • ../../dev/architecture/Кэширование: ускорение обработки данных с частым доступом.
  • Управление сессиями: хранение данных сессий пользователей.
  • Распределённая ../../dev/fundamental/Блокировка: установка блокировок между сервисами.
  • Очереди сообщений: управление сообщениями с использованием структур данных (списки, потоки).
  • Подсчёт данных: подсчёт просмотров, лайков.
  • Ограничитель частоты запросов: Redis позволяет устанавливать лимиты на частоту запросов для определённых IP-адресов пользователей.
  • Рейтинги и сортировки: с помощью сортированных множеств (ZSet).
  • Генератор глобальных ID: Можно использовать Redis для генерации глобальных идентификаторов с помощью целочисленных значений.

!../files/images/Pasted image 20241103034136.png

  • Доступ к данным в RAM как минимум в 1000 раз быстрее, чем произвольный доступ к данным на диске.
  • Redis использует IO multiplexing и ../../dev/architecture/Event Loop для повышения эффективности работы.
  • Кроме того, Redis задействует несколько эффективных низкоуровневых структур данных.

Redis поддерживает два типа сохранения данных.

  • ../../dev/database/redis/Redis Database Backup создание снимков базы данных через заданные промежутки времени
  • ../../dev/database/redis/Append-Only File логирование каждой операции для минимизации потерь данных Комбинированный подход RDB + AOF позволяет добиться как высокой производительности, так и надёжности. В случае катастрофы Redis сначала восстанавливает данные из последнего RDB-снапшота, а затем воспроизводит команды из AOF, чтобы восстановить данные до актуального состояния.

Кластеризация

Реплики работают только в режиме чтения. Нужно на стороне клиента понять в какую реплику нужно писать ключ. При отправке запроса не в ту реплику, редис ответит ошибкой, указав хост, куда нужно отправить запрос.

Что если упадет один из мастеров? В таком случае кластер не обнаружит проблему и нас будут отправлять на несуществующий адрес.

Есть senitel. Который выступает оркестратором и прокси. Он сам будет отправлять запросы в нужную ноду. Он же будет отвечать за Failover?

Заметки

  • Порт по умолчанию 6379
  • Может работать с геолокациями