Каковы преимущества и недостатки Redis?
преимущество
- Производительность чтения и записи превосходна: Redis может читать со скоростью 110 000 раз/с и записывать со скоростью 81 000 раз/с.
- Поддержка сохранения данных, поддержка методов сохранения AOF и RDB.
- Поддержка транзакций, все операции Redis являются атомарными, а Redis также поддерживает атомарное выполнение нескольких операций после слияния.
- Структура данных богата, помимо поддержки значения строкового типа, она также поддерживает такие структуры данных, как хэш, набор, zset и список.
- Поддержка репликации master-slave, хост автоматически синхронизирует данные с ведомым устройством, а также может быть выполнено разделение чтения и записи.
недостаток
- Емкость базы данных ограничена физической памятью и не может использоваться для высокопроизводительного чтения и записи массивных данных, поэтому Redis подходит для высокопроизводительных операций и операций с небольшим объемом данных.
- Redis не имеет функций автоматической отказоустойчивости и восстановления. Время простоя хоста и подчиненного устройства приведет к сбою некоторых запросов на чтение и запись во внешнем интерфейсе. Необходимо дождаться перезагрузки машины или вручную переключить внешний IP-адрес. выздороветь.
- Когда хост не работает, некоторые данные не могут быть синхронизированы с подчиненным до времени простоя.После переключения IP возникает проблема несогласованности данных, что снижает доступность системы.
- Redis сложно поддерживать онлайн-расширение, а онлайн-расширение станет очень сложным, когда емкость кластера достигнет верхнего предела.
Почему Redis такой быстрый?
- Полностью основанный на памяти, большинство запросов являются операциями с чистой памятью, очень быстрыми.
- Структура данных проста, а скорость чтения высокая. Например, SDS, двусторонний связанный список, сжатый связанный список, переходный связанный список.
- Для обработки сетевых запросов используется один поток, что позволяет избежать ненужных переключений контекста и условий гонки.
Начиная с Redis 4.0, асинхронные потоки используются для обработки некоторых трудоемких операций. Например, асинхронные потоки реализуют ленивое удаление (чтобы решить проблему удаления большого KEY, блокирующего основной поток), асинхронный AOF (чтобы решить проблему нагрузки на дисковый ввод-вывод, выполнение fsync очень медленно) и так далее.
- Используйте мультиплексированную модель мультиплексирования ввода-вывода, неблокирующий ввод-вывод.
- Используются разные базовые модели, и базовые методы реализации и протоколы приложений для связи с клиентами разные.Redis напрямую сам строит механизм ВМ, потому что если общая система вызывает системные функции, то будет тратиться определенное количество времени на перемещение и просьба. .
Сколько баз данных в Redis?
Сервер Redis по умолчанию создаст 16 баз данных, которые можно изменить с помощью настроенного параметра базы данных. По умолчанию целевой базой данных клиента Redis является база данных 0.
Структуры данных Redis?
- Основные типы данных: строка, список, набор, zset, хеш
- Расширенные структуры данных: Bitmap, HyperLogLog, GEO
Модуль Redis: BloomFilter, RedisSearch, Redis-ML, JSON. Функция потока (новое в версии 5.0)
Сценарии использования Redis
- кеш данных
- кеш сеанса
- Своевременные данные
- Частота посещения
- прилавок
- социальный список
- Запишите информацию о суждении пользователя
- Пересечение, союз и различие
- Популярные списки и таблицы лидеров
- Последние новости
- очередь сообщений
- Распределенная блокировка
Стойкость Redis
Redis предоставляет два способа сохранения данных на жесткий диск. При запуске Redis файл AOF будет загружен первым, а если AOF не включен, будет загружен файл RDB (он не будет загружен, если он не включен).
Постоянство RDB (полное), разветвите дочерний процесс, запишите снимок набора данных в течение указанного интервала времени в памяти во временный файл, а после успеха замените предыдущий файл и сохраните его с двоичным сжатием. по конфигурацииsave
параметр,save
(блокировать),bgsave
,shutdown
,flushall
сработала команда.
-
Преимущества: гибкая настройка частоты и цикла резервного копирования, подходит для холодного резервного копирования, простота восстановления при наборе данных, сохраняемость подпроцесса не повлияет на ввод-вывод основного процесса.
-
Недостатки: большое окно потерянных данных.Когда набор данных большой, дочерний процесс форка может привести к тому, что весь сервер перестанет обслуживать на сотни миллисекунд или даже на 1 секунду.
Не рекомендуется включать функцию RDB на основном узле Redis, что вызовет блокировку на определенный период времени, особенно при большом объеме данных
Постоянство AOF (добавочное), добавить выполненную команду записи в буфер aof_buf состояния сервера в формате протокола, а затем синхронизировать данные на жесткий диск согласно соответствующей политике. По мере того, как файл становится все больше и больше, файл AOF необходимо периодически перезаписывать (разветвлять дочерний процесс для завершения). настроитьappendonly yes
Включить АОФ.
Для загрузки AOF-файла нужно сначала создать псевдоклиент, а затем отправить команды по одной на сервер Redis, и сервер полностью выполнит соответствующие команды.
-
Политика записи: настроить
appendsync
, синхронизировать каждую секунду (everysec
), дождитесь заполнения буфера для синхронизации (no
), который синхронизируется немедленно каждый раз, когда происходит изменение данных (always
). -
Механизм перезаписи: пройти
auto-aof-rewrite-min-size
,auto-aof-rewrite-percentage
Настройте время перезаписи. Перезапись сохранит только окончательные данные, несколько команд записи будут объединены в одну, а данные, время ожидания которых истекло, не будут записаны в файл. В процессе перезаписи команды, выполняемые родительским процессом, будут посылаться дочернему процессу пакетами через конвейер, а дочерний процесс будет перезаписывать и воспроизводить их. После завершения дочернего процесса в родительском процессе накапливается лишь небольшое количество команд, и родительскому процессу нужно воспроизвести лишь небольшое количество команд. -
Преимущества: более высокая безопасность данных, отсутствие накладных расходов на адресацию диска в режиме добавления, очень высокая производительность записи и отсутствие повреждения уже сохраненных данных.
-
Недостатки: файлы AOF обычно больше, чем файлы RDB, а скорость восстановления больших наборов данных ниже, чем у RDB.AOF, более сложный метод, основанный на журнале команд/объединении/воспроизведении, подвержен ошибкам
Начиная с Redis 4.0 разрешено использовать
RDB-AOF
Гибридный режим сохраняемости (включен по умолчанию в версии 5.0). Оптимизировать механизм перезаписи.После перезаписи первая половина нового файла AOF представляет собой полные данные в формате RDB, а вторая половина — добавочные данные в формате AOF. Когда экземпляр Redis перезапускается, он будет использовать постоянный файл RDB для перестроения памяти, а затем использовать AOF для воспроизведения последних инструкций по операции, чтобы полностью восстановить состояние до перезапуска.
Политика истечения срока действия данных Redis
- Удаление по времени: При установке времени истечения срока действия ключа создайте таймер (таймер), чтобы таймер сразу удалял ключ, когда наступает время истечения срока действия ключа. Не дружественный процессор.
- Ленивое удаление: Пусть срок действия ключа все равно истекает, но каждый раз, когда ключ получается из пространства ключей, проверяйте, истек ли срок действия полученного ключа.Если срок его действия истек, удалите ключ, если нет, верните ключ.
- Периодическое удаление: в течение заданного времени просматривайте каждую базу данных на сервере несколько раз, случайным образом проверяйте время истечения срока действия некоторых ключей из словаря expires базы данных и удаляйте ключи с истекшим сроком действия.
Словарь expires сохранит данные о времени истечения срока действия всех ключей с установленным временем истечения срока действия, где ключ — это указатель на ключ в пространстве ключей, а значение — это время истечения срока действия, представленное отметкой времени UNIX с точностью до миллисекунды ключа. В Redis используются как ленивое, так и периодическое истечение.
Стратегия удаления данных Redis
Когда размер набора данных памяти Redis достигает определенного размера, будет реализована стратегия удаления данных. Redis предлагает следующие 8 стратегий удаления данных:
- Выборочное удаление глобального пространства ключей
- noeviction: новая операция записи сообщит об ошибке. (дефолт)
- allkeys-lru: удалить самый старый неиспользуемый ключ в пространстве ключей. (это чаще всего используется)
- allkeys-random: случайным образом удалить ключ в пространстве ключей.
- allkeys-lfu: в пространстве ключей удалить наименее часто используемый ключ (4.0).
- Выборочное удаление пространств ключей со сроком действия
- volatile-lru: удалить самый старый неиспользуемый ключ в пространстве ключей с установленным сроком действия.
- volatile-random: случайным образом удалить ключ в ключевом пространстве с установленным временем истечения срока действия.
- volatile-ttl: в пространстве ключей с установленным сроком действия сначала удаляются ключи с более ранним сроком действия.
- volatile-lfu: В ключевом пространстве с установленным временем истечения удалить ключ с наименьшей частотой (4.0)
LRU: не строгая реализация LRU, путем выборки небольшого набора ключей, а затем восстановления наилучшего соответствия (с наибольшим временем без посещения) среди выбранных ключей.
В MySQL есть данные 2000 Вт, а в Redis - только 20. Как убедиться, что данные в Redis являются горячими данными? Выберите политику allkeys-lru. Если вы используете Redis 4.0, рассмотрите возможность использования volatile-lfu
Если есть большое количество ключей, срок действия которых нужно установить одновременно, на что следует обратить внимание?
Если большое количество сроков действия ключей установлено слишком централизованно, обычно необходимо добавить к времени случайное значение, чтобы сделать сроки действия более разбросанными. Увеличьте параметр Гц.
Redis-транзакции
Транзакция Redis — это одноразовое, последовательное и монопольное выполнение серии команд в очереди. Не существует понятия уровня изоляции. Если какая-либо команда в транзакции не будет выполнена, остальные команды все равно будут выполнены.
пройти черезMULTI
Команда запускает транзакцию, а команды, выполняемые после оператора, будут рассматриваться как операции внутри транзакции.Наконец, мы можем выполнитьEXEC
/DISCARD
команда для фиксации/отката всех операций внутри транзакции. После открытия транзакции все операторы, отправленные на сервер Redis, будут временно храниться на сервере. Перед запуском транзакции, если между клиентом и сервером произошел сбой связи и сеть отключена, все последующие операторы, которые должны быть выполнены, не будут выполняться сервером.
Как реализовать работу Redis CAS?
В транзакции RedisWATCH
Команды могут использоваться для обеспечения функциональности CAS.
Синхронизация Redis master-slave
Команда psync реализует полную репликацию и добавочную репликацию. Инкрементная репликация достигается с помощью идентификатора мастера, смещения репликации и буфера невыполненной репликации мастера.
Редис Сентинел
Кластер Redis
Кластер Redis использует сегментированные хеш-слоты данных для хранения и чтения данных. Добавление и удаление узлов в кластере Redis требует ручного выделения слотов. Кластер Redis выполняет операции чтения и записи на главном узле.
Redis реализует распределенные блокировки
часто задаваемые вопросы на собеседовании
Как реализовать очередь сообщений с помощью Redis?
Как правило, структура списка используется в качестве очереди, rpush создает сообщения, а lpop потребляет сообщения. Когда нет сообщения от lpop, немного поспите и попробуйте еще раз. Вы также можете использовать blpop, который блокируется до тех пор, пока не придет сообщение, когда сообщения нет. Используя шаблон подписчика темы публикации/подписки, можно реализовать очередь сообщений 1:N. Но в случае, если потребитель находится в автономном режиме, созданное сообщение будет потеряно.
Отложенная очередь: используйте sortedset, используйте метку времени в качестве оценки и вызовите zadd в качестве ключа для создания сообщений.Потребители используют команду zrangebyscore для получения данных опроса N секунд назад для обработки.
Ссылаться на
- «Проектирование и реализация Redis» (Хуан Цзяньхун)
- Woohoo.process on.com/view/5 7 очень 4…
- Это кодер VIP.IO для /Redis/inter...