1 of 18

Redis

2 of 18

3 of 18

Основная информация

Структура данных: ключ-значение

Чтение и запись ведутся в оперативной памяти:

  • Скорость операций выше, чем для диска
  • Объем памяти меньше, чем для диска
  • Энергозависимость

Поддержка кластерной работы

Поддержка репликации по принципу master-replica (ведущий-ведомый)

4 of 18

Ключевые возможности

  • Все данные в оперативной памяти
  • Все данные могут быть персистентными
  • Обрабатывает большие нагрузки
  • В основном О(1)
  • Поддерживает атомарные операции
  • Поддерживает транзакции (не гарантирует ACID)
  • Имет Pub/Sub функциональность
  • Есть много библиотек для разных языков
  • Single thread, async IO

5 of 18

Небольшой бенчмарк

Laptop, core i7 @2.2Ghz

SET: 187265.92 ops

GET: 185185.17 ops

INCR: 190114.06 ops

6 of 18

Хранение данных

Основное место хранения - оперативная память

Можно настроить режим работы:

  • Хранить только в оперативной памяти
  • При каждом изменении записывать данные в оперативную память и дописывать в журнал на диск
  • С заданной периодичностью дописывать изменения в журнал на диск
  • С заданной периодичностью сохранять снимок данных на диск

7 of 18

Еще немного про персистентность

  • Все данные можно сохранять на диск (eventually and immediately)
  • Выбор риск/производительность
  • Используется подход append-only change-log
  • Поддерживаются транзакционные записи на диск

Стандартная конфигурация персистентса:

  • Через 15 минут, если хоть 1 ключ изменился
  • Через 5 минут, если 10 ключей поменялись
  • Через минуту, если изменилось более 1000 ключей

8 of 18

Виртуальная память

  • Если БД большая - существует swap
  • Ключи остаются в памяти и LRU Cache на диске
  • Swapping IO в разных тредах

Лучше добавить ресурсов, чем включать этот режим

9 of 18

Ключи

Ключ - двоичные данные до 512 Мб

Ключом может быть как строка “key”, так и содержимое MP3-файла

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

Примеры ключей:

  • usersCount
  • users:5401
  • goods/smartphones/Apple

10 of 18

Типы данных

  • Строки (strings)
  • Списки (lists)
  • Множества/наборы (sets)
  • Упорядоченные множества/наборы (sorted sets)
  • Хеши (hashes)
  • Битовые массивы (bit arrays)
  • HyperLogLogs
  • Потоки (streams)

11 of 18

Примеры использования

12 of 18

GET/SET

13 of 18

Atomic

14 of 18

Lists

15 of 18

Hashes

16 of 18

Кластер Redis

Узлы в кластере в автоматическом и прозрачном для клиента режиме распределяют все данные между собой.

Если часть узлов недоступна, кластер в целом продолжает работу.

Узлы могут выполнять две роли:

  • Master - непосредственно принимает запросы на изменение данных, изменяет их, а также передает команду на изменение всем связанным replica-узлам.
  • Replica - получает от master-узла команды на изменение. Пытается поддерживать данные в синхронизированном с master-узлом состоянии. Может обрабатывать запросы на чтение.

17 of 18

Redis Sentinel

  • Мониторинг master- и replica-узлов
  • Реестр конфигурации - хранит, обновляет и предоставляет информацию об адресах master-узлов
  • Оповещение администратора или других программ о сбоях
  • Восстановление узлов после сбоя, автоматическое переключение

18 of 18

Использование

  • Кеширование результатов сложных запросов к БД, долгих вычислений, долгих сетевых запросов и т.д.
  • Распределенный Lock
  • Хранение разделяемых между микросервисами “горячих” данных
  • Организация служб очередей
  • Организация взаимодействия вида publisher-subscriber

https://www.youtube.com/watch?v=a4yX7RUgTxI&t=245s&ab_channel=ByteByteGo