digital-garden/meta/zero/00 Redis.md
Struchkov Mark c8bcf584e1
All checks were successful
continuous-integration/drone/push Build is passing
Тип хранилища данных
2024-11-24 10:17:46 +03:00

6.3 KiB
Raw Blame History

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

Remote Dictionary Service (Redis) — это хранилище данных на основе ../../../../knowledge/dev/pc/Оперативная память (RAM) организованное по принципу "../../dev/Key-Value хранилище". Работает с использованием кооперативной многозадачности.

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

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

Недостатки:

  • Сложный в настройках

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

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

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

  • Доступ к данным в 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. Но при этом может страдать надежность доставки.