1. Что такое Redis?
Redis полностью открыт и бесплатен, соответствует протоколу BSD и представляет собой высокопроизводительную базу данных «ключ-значение».
Redis и другие продукты кэширования значений ключа имеют следующие три характеристики:
- Redis поддерживает сохраняемость данных, которая может сохранять данные в памяти на диск и может быть загружена снова для использования при перезапуске.
- Redis не только поддерживает простые данные типа «ключ-значение», но также обеспечивает хранение таких структур данных, как список, набор, zset и хэш.
- Redis поддерживает резервное копирование данных, то есть резервное копирование данных в режиме master-slave.
Преимущества Redis
Чрезвычайно высокая производительность — Redis может читать со скоростью 110 000 раз/с и записывать со скоростью 81 000 раз/с.
Богатые типы данных — Redis поддерживает бинарные строки, списки, хэши, наборы и
Упорядоченные наборы операций с типами данных.
Атомарность — все операции в Redis являются атомарными, что означает, что они либо выполняются успешно, либо вообще не выполняются.
воплощать в жизнь. Одна операция атомарна. Транзакции также поддерживаются для нескольких операций, то есть атомарности, через MULTI и EXEC.
Инструкции упакованы.
Богатые возможности — Redis также поддерживает публикацию/подписку, уведомления, истечение срока действия ключа и многое другое.
Чем Redis отличается от других хранилищ ключей и значений?
Redis имеет более сложные структуры данных и обеспечивает атомарные операции над ними, что отличается
Эволюционный путь его базы данных. Типы данных Redis основаны на базовых структурах данных и прозрачны для программистов.
ясно, никаких дополнительных абстракций не требуется.
Redis работает в памяти, но может быть сохранен на диске, поэтому при чтении и записи различных наборов данных на высокой скорости
Существует компромисс в памяти, поскольку объем данных не может быть больше, чем аппаратная память. Еще одно преимущество с точки зрения баз данных в памяти
Да, по сравнению с теми же сложными структурами данных на диске работать в памяти очень просто, так что Redis
Может делать много вещей с большой внутренней сложностью. В то же время они компактны с точки зрения формата диска, чтобы добавить
генерируются таким образом, что им не нужен произвольный доступ.
2. Какой тип данных у Redis?
О: Redis поддерживает пять типов данных: string (строка), hash (хеш), list (список), set (коллекция) и zsetsorted set: отсортированный набор).
Строка и хэш обычно используются в наших реальных проектах.Если вы опытный пользователь Redis, вам необходимо добавить следующие структуры данных HyperLogLog, Geo и Pub/Sub.
Если вы скажете, что играли в модуль Redis, такой как BloomFilter, RedisSearch, Redis-ML, у интервьюера загорятся глаза.
3. Каковы преимущества использования Redis?
1. Быстрая скорость, т.к. данные хранятся в памяти, аналогично HashMap, преимущество HashMap в том, что временная сложность поиска и работы O1)
2. Поддержка расширенных типов данных, поддержка строк, списков, наборов, Zset, хэшей и т. д.
3. Транзакции поддерживаются, а операции атомарны, так называемая атомарность означает, что все изменения данных либо выполняются, либо не выполняются вообще.
4. Богатые функции: можно использовать для кеша, сообщения, установить время истечения срока действия в соответствии с ключом, он будет автоматически удален после истечения срока действия.
4. Каковы преимущества Redis перед Memcached?
1. Все значения Memcached — простые строки, а redis, как его замена, поддерживает более богатые классы данных
2. Redis быстрее, чем Memcached
3. Redis может сохранять свои данные
5. В чем разница между Memcache и Redis?
1. Способ хранения Memecache хранит все данные в памяти, после сбоя питания он зависает, и данные не могут превышать размер памяти. Часть Redis хранится на жестком диске, что обеспечивает сохранность данных.
2. Тип поддержки данных Memcache поддерживает относительно простые типы данных. Redis имеет сложные типы данных.
3. Используются разные базовые модели, различаются лежащие в их основе методы реализации и прикладной протокол для связи с клиентом. Redis напрямую строит сам механизм ВМ, потому что, если общая система вызывает системные функции, она будет тратить определенное количество времени на перемещение и запрос.
6. Является ли Redis одним процессом и одним потоком?
Ответ: Redis является однопроцессорным и однопоточным.Redis использует технологию очередей, чтобы превратить одновременный доступ в последовательный доступ, устраняя накладные расходы на последовательное управление традиционными базами данных.
7. Какова максимальная емкость, которую может хранить значение строкового типа?
Ответ: 512М
8. Каков механизм сохраняемости Redis? Преимущества и недостатки каждого?
Redis предоставляет два механизма сохранения, механизмы RDB и AOF:
1. База данных RDBRedis) Режим сохранения: относится к полупостоянному режиму моментальных снимков набора данных) для записи всех пар ключ-значение базы данных Redis и записи данных во временный файл в определенный момент времени. закончился, используйте этот временный файл для замены последнего постоянного файла для восстановления данных.
преимущество:
1. Файл dump.rdb всего один, что удобно для сохранения.
2. Хорошая катастрофоустойчивость, файл можно сохранить на безопасный диск.
3. Чтобы максимизировать производительность, разветвите дочерний процесс для завершения операции записи и позвольте основному процессу продолжить обработку команд, чтобы максимизировать ввод-вывод. Для персистентности используется отдельный подпроцесс, а основной процесс не будет выполнять никаких операций ввода-вывода, что обеспечивает высокую производительность redis) 4. По сравнению с большим набором данных эффективность запуска выше, чем у AOF.
недостаток:
1. Низкая безопасность данных. RDB сохраняется через определенные промежутки времени. Если между сохранениями произойдет сбой Redis, произойдет потеря данных. Так что этот метод больше подходит, когда требования к данным не строгие)
2. AOFAppend-only file) режим сохранения: это означает, что все записи командной строки полностью постоянно хранятся в формате протокола запроса команды redis) и сохраняются в виде файлов aof.
преимущество:
1. Безопасность данных, постоянство aof можно настроить с помощью атрибута appendfsync, он есть всегда, и каждое действие команды записывается в файл aof один раз.
2. Записывая файлы в режиме добавления, даже если сервер выходит из строя посередине, проблема согласованности данных может быть решена с помощью инструмента redis-check-aof.
3. Режим перезаписи механизма AOF. Перед перезаписью файла AOF (команды будут объединены и перезаписаны, если файл станет слишком большим), некоторые команды можно удалить (например, неправильную операцию flushall))
недостаток:
1. Файл AOF больше, чем файл RDB, и скорость восстановления ниже.
2. Когда набор данных большой, эффективность запуска ниже, чем у rdb.
9. Общие проблемы с производительностью и решения Redis:
1.Мастеру лучше не записывать снимок памяти.Если Мастер записывает снимок памяти, команда сохранения назначает функцию rdbSave, которая блокирует работу основного потока.Когда снимок относительно большой, производительность воздействие очень велико, и служба будет периодически приостанавливаться.
2. Если данные более важны, ведомое устройство позволяет AOF выполнять резервное копирование данных, а политика настроена на синхронизацию каждую секунду.
3. Для скорости репликации master-slave и стабильности соединения лучше всего, чтобы Master и Slave находились в одной локальной сети.
4. Старайтесь избегать добавления ведомых устройств в основную библиотеку под большим давлением
5. Репликация master-slave не использует структуру графа, но структура односвязного списка более стабильна, то есть: Master
10. Какова стратегия удаления ключей redis с истекшим сроком действия?
1. Удаление по времени: создайте таймер при установке времени истечения срока действия ключа, чтобы таймер сразу удалял ключ, когда наступает время истечения срока действия ключа.
2. Ленивое удаление: Пусть истечет срок действия ключа независимо, но каждый раз, когда ключ будет получен из пространства ключей, проверьте, истек ли срок действия полученного ключа, если он истекает, удалите ключ, если он не истек, верните ключ.
3. Периодическое удаление: Программа время от времени проверяет базу данных и удаляет из нее просроченные ключи. Сколько просроченных ключей удалить и сколько баз данных проверить, зависит от алгоритма.
11. Стратегия утилизации Redis (стратегия устранения)?
- volatile-lru: выбирает наименее использованные данные из набора данных (server.db[i].expires) с установленным временем истечения срока действия.
- volatile-ttl: выберите данные, срок действия которых истекает, из набора данных (server.db[i].expires), в котором установлено время истечения срока действия.
- volatile-random: произвольный выбор удаления данных из набора данных с установленным временем истечения срока действия (server.db[i].expires)
- allkeys-lru: выбрать наименее использованные данные из набора данных (server.db[i].dict) для исключения
- allkeys-random: Случайный выбор данных из набора данных (server.db[i].dict) для исключения
- no-enviction: запретить удаление данных
Обратите внимание на шесть механизмов здесь, volatile и allkeys указывают, следует ли удалять данные для набора данных с истекшим временем или удалять данные из всех наборов данных, Последние lru, ttl и random - это три разные стратегии исключения, плюс A no -политика запрета на переработку.
Используйте правила политики:
1. Если данные имеют степенное распределение, то есть некоторые данные имеют высокую частоту доступа, а некоторые данные имеют низкую частоту доступа, используйте allkeys-lru
2. Если данные распределены поровну, то есть все частоты доступа к данным одинаковы, используйте allkeys-random
12. Почему edis нужно хранить все данные в памяти?
О: Чтобы достичь максимальной скорости чтения и записи, Redis считывает все данные в память и записывает данные на диск асинхронно. Таким образом, Redis обладает такими характеристиками, как высокая скорость и сохранение данных. Если данные не помещаются в память, скорость дискового ввода-вывода серьезно повлияет на производительность Redis. Сегодня, когда память становится все дешевле и дешевле, Redis будет становиться все популярнее. Если установлен максимальный объем используемой памяти, новые значения не могут быть вставлены после того, как количество существующих записей данных достигнет предела памяти.
13. Вы понимаете механизм синхронизации Redis?
О: Redis может использовать синхронизацию ведущий-ведомый и синхронизацию подчиненный-ведомый. Во время первой синхронизации главный узел выполняет bgsave и одновременно записывает последующие операции модификации в буфер памяти.После завершения файл rdb полностью синхронизируется с узлом репликации.После того, как узел репликации примет его, образ rdb загружается в память. После завершения загрузки главный узел уведомляется о необходимости синхронизации записей операций, измененных в течение периода, с узлом-репликой для воспроизведения, и процесс синхронизации завершается.
14. Каковы преимущества Pipeline, зачем использовать конвейер?
Ответ: Можно сократить время нескольких циклов ввода-вывода до одного при условии отсутствия причинно-следственной связи между инструкциями, выполняемыми конвейером. При использовании redis-benchmark для нагрузочного тестирования можно обнаружить, что важным фактором, влияющим на пиковое значение QPS для redis, является количество конвейерных пакетных инструкций.
15. Использовали ли вы кластер Redis и каков принцип кластеризации?
1), Redis Sentinal фокусируется на высокой доступности.Когда главный сервер выходит из строя, он автоматически повышает подчиненный уровень до главного и продолжает предоставлять услуги.
2), Redis Cluster фокусируется на масштабируемости и использует Cluster для сегментированного хранилища, когда одной памяти Redis недостаточно.
16. При каких обстоятельствах кластерное решение Redis приведет к недоступности всего кластера?
Ответ: Кластер с тремя узлами A, B и C, при отсутствии модели репликации, при отказе узла B весь кластер будет думать, что слоты в диапазоне 5501-11000 отсутствуют и недоступны.
17. Какие Java-клиенты поддерживает Redis? Какая официальная рекомендация?
A: Redisson, Jedis, салат и т. д. официально рекомендуется использовать Redisson.
18. Каковы преимущества и недостатки Jedis и Redisson?
Ответ: Jedis является клиентом реализации Java Redis, а его API обеспечивает всестороннюю поддержку команд Redis. Redisson реализует распределенную и масштабируемую структуру данных Java. По сравнению с Jedis его функции проще и не поддерживают строки. Операции, функции Redis, такие как сортировка, транзакции, конвейеры и секционирование не поддерживаются. Цель Redisson — способствовать разделению интересов пользователей по поводу Redis, чтобы пользователи могли больше сосредоточиться на обработке бизнес-логики.
19. Как Redis устанавливает пароль и проверяет пароль?
Установить пароль: config set requirepass 123456
Пароль авторизации: auth 123456
20. Расскажите о концепции хеш-слота Redis?
Ответ: Кластер Redis не использует последовательное хеширование, но вводит концепцию хэш-слотов. Кластер Redis имеет 16384 хеш-слотов. После проверки каждого ключа с помощью CRC16 для определения того, какой слот разместить, используется модуль 16384. Каждый узел отвечает за это. для части хеш-слотов.
21. Что такое модель репликации master-slave в кластере Redis?
О: Чтобы сделать кластер доступным, даже если некоторые узлы откажут или большинство узлов не смогут установить связь,
Кластер использует модель репликации master-slave, и каждый узел будет иметь N-1 реплик.
22. Будут ли потеряны операции записи в кластере Redis? Почему?
Ответ: Redis не гарантирует строгой согласованности данных, а это означает, что на практике кластер может быть
Операции записи могут быть потеряны.
23. Как реплицируются кластеры Redis?
Ответ: асинхронная репликация.
24. Какое максимальное количество узлов в кластере Redis?
Ответ: 16384.
25. Как кластер Redis выбирает базу данных?
О: Кластер Redis в настоящее время не может выбирать базу данных, по умолчанию используется 0 база данных.
26. Как проверить возможность подключения Redis?
О: Используйте команду ping.
27. Как понять транзакцию Redis?
отвечать:
1) Транзакция — это отдельная изолированная операция: все команды в транзакции сериализуются и выполняются последовательно. Во время выполнения транзакции она не будет прервана командным запросом, отправленным другими клиентами.
2) Транзакция является атомарной операцией: либо выполняются все команды в транзакции, либо не выполняется ни одна из них.
28. Какие команды связаны с транзакциями Redis?
Ответ: МУЛЬТИ, ВЫПОЛНИТЬ, ОТМЕНИТЬ, СМОТРЕТЬ
29. Как установить срок действия и постоянную действительность ключа Redis?
Ответ: команды EXPIRE и PERSIST.
30. Как Redis оптимизирует память?
Ответ: Максимально используйте хеш-таблицы.Хеш-таблица (имеется в виду, что число, хранящееся в хэш-таблице, невелико) использует очень мало памяти, поэтому вам следует максимально абстрагировать свою модель данных в хеш-таблицу. Например, если в вашей веб-системе есть объект пользователя, не устанавливайте отдельный ключ для имени, фамилии, адреса электронной почты и пароля пользователя, а храните всю информацию о пользователе в хеш-таблице.
31. Как работает процесс утилизации Redis?
A: Клиент запускает новую команду, добавляя новые данные. Redi проверяет использование памяти, и если оно превышает лимит maxmemory, оно будет переработано в соответствии с установленной политикой. Выполняется новая команда и так далее. Таким образом, мы продолжаем пересекать границы предела памяти, постоянно достигая границ, а затем постоянно возвращаясь обратно за границы. Если команда приводит к использованию большого объема памяти (например, сохранение пересечения большого набора с новым ключом), превышение лимита памяти при таком использовании памяти не займет много времени.
32. Как уменьшить использование памяти Redis?
Ответ. Если вы используете 32-разрядный экземпляр Redis, вы можете эффективно использовать Hash, list, sorted set, set
Данные типа коллекции, потому что обычно многие небольшие ключи-значения могут храниться более компактно.
собраться вместе.
33. Что происходит, когда у Redis заканчивается память?
О: Если достигнут верхний предел, команда записи Redis вернет сообщение об ошибке (но команда чтения может
Часто возвращайтесь. ) или вы можете использовать Redis в качестве кеша, чтобы использовать механизм устранения конфигурации, когда Redis достигает памяти
При ограничении старый контент сбрасывается.
34. Сколько ключей может хранить максимум экземпляр Redis? Список, набор, отсортированный набор Максимальное количество элементов, которые они могут хранить?
О: Теоретически Redis может обрабатывать до 232 ключей, а на практике было протестировано не менее 250 миллионов ключей на экземпляр. Мы тестируем некоторые большие значения. Любой список, набор и отсортированный набор могут содержать 232 элемента. Другими словами, ограничение хранилища Redis — это значение доступной памяти в системе.
35. В MySQL данных 2000 Вт, а в Redis только 20. Как убедиться, что данные в Redis являются горячими данными?
О: Когда размер набора данных памяти Redis достигнет определенного размера, будет реализована стратегия удаления данных.
Связанные знания: Redis предлагает 6 стратегий удаления данных:
volatile-lru: выберите самый последний набор данных (server.db[i].expires) с установленным временем истечения срока действия.
Избавьтесь от менее используемых данных
volatile-ttl: выберите из набора данных (server.db[i].expires), для которого установлено истечение срока действия.
срок устаревания данных
volatile-random: Произвольно из набора данных (server.db[i].expires) с установленным сроком действия.
Выберите удаление данных
allkeys-lru: выбрать данные из набора данных, которые использовались реже всего (server.db[i].dict).
allkeys-random: произвольный выбор данных из набора данных (server.db[i].dict) для исключения
запрет: запретить вытеснение данных
36. Какой сценарий наиболее подходит для Redis?
1. Кэш сеанса
Одним из наиболее распространенных вариантов использования Redis является кеш сеанса. Преимущество кэширования сеансов с Redis по сравнению с другими хранилищами, такими как Memcached, заключается в том, что Redis обеспечивает постоянство. При поддержке кеша, который строго не требует согласованности, большинство людей будут недовольны потерей всей информации о пользовательской корзине.Будут ли они по-прежнему делать это? К счастью, поскольку с годами Redis совершенствуется, легко найти документацию о том, как правильно использовать Redis для кэширования сеансов. Даже известная коммерческая платформа Magento предлагает плагины для Redis.
2. Полностраничный кэш (FPC)
В дополнение к базовым токенам сеанса Redis также предоставляет очень простую платформу FPC. Возвращаясь к проблеме согласованности, даже если экземпляр Redis будет перезапущен из-за сохраняемости диска, пользователи не заметят падения скорости загрузки страницы Это большое улучшение, аналогичное локальному FPC в PHP. Снова возьмем Magento в качестве примера. Magento предоставляет плагин для использования Redis в качестве бэкенда полного кэша страниц. Кроме того, для пользователей WordPress у Pantheon есть очень хороший плагин wp-redis, который помогает максимально быстро загружать страницы, которые вы когда-либо просматривали.
3. Очередь
Одно из больших преимуществ Reids в области механизмов хранения в памяти заключается в том, что он предоставляет операции со списками и наборами, что делает Redis хорошей платформой для организации очередей сообщений. Операции, используемые Redis в качестве очереди, аналогичны операциям push/pop для списков в родных языках программирования, таких как Python. Если вы выполните быстрый поиск в Google по запросу «очереди Redis», вы сразу же найдете множество проектов с открытым исходным кодом, которые нацелены на использование Redis для создания отличных внутренних инструментов для различных нужд организации очередей. Например, у Celery есть серверная часть, использующая Redis в качестве брокера, что вы можете проверить здесь.
4. Таблица лидеров/счетчик
Redis отлично справляется с увеличением или уменьшением чисел в памяти. Наборы и отсортированные наборы также упрощают нам выполнение этих операций Redis просто предоставляет эти две структуры данных. Итак, мы хотим получить 10 лучших пользователей из отсортированного набора — назовем его «user_scores», нам просто нужно сделать что-то вроде: сортировка по возрастанию. Если вы хотите вернуть пользователя и его счет, вам нужно сделать это следующим образом: ZRANGE user_scores 0 10 WITHSCORES Agora Games — хороший пример, реализованный на Ruby, его таблица лидеров использует Redis для хранения данных, вы можете найти ее. здесь См.
5. Опубликовать/подписаться
И последнее (но не менее важное) — это функция публикации/подписки Redis. Вариантов использования публикации/подписки действительно много. Я видел, как люди используют его в социальных сетях, в качестве триггеров для скриптов на основе pub/sub и даже создают чат-системы с функциональностью Redis pub/sub!
37. Если в Redis 100 миллионов ключей, а ключи 10w начинаются с фиксированного и известного префикса, как их все найти?
A: Используйте команду keys для сканирования списка ключей указанного режима.
Затем другая сторона спросила: если этот Redis предоставляет услуги онлайн-бизнесу, в чем проблема с использованием команды ключей?
На данный момент вы должны ответить на ключевую особенность Redis: однопоточный Redis. Инструкция keys приведет к блокировке потока на определенный период времени, а онлайн-служба будет приостановлена до тех пор, пока инструкция не будет выполнена, и служба может быть возобновлена. В это время можно использовать команду сканирования.Команда сканирования может извлечь список ключей указанного режима без блокировки, но будет определенная вероятность повторения.Это можно сделать один раз на стороне клиента, но общее время потрачено будет дольше, чем непосредственное использование.Команда ключей длинная.
38. Если есть большое количество ключей, срок действия которых нужно установить одновременно, на что следует обратить внимание?
О: Если время истечения большого количества ключей установлено слишком концентрированным, в момент истечения срока действия Redis может испытывать кратковременное зависание. Как правило, к времени необходимо добавить случайное значение, чтобы сделать время истечения разбросанным.
39. Использовали ли вы Redis в качестве асинхронной очереди и как вы это использовали?
Ответ: Структура списка обычно используется как очередь, rpush создает сообщения, а lpop потребляет сообщения. Когда нет сообщения от lpop, немного поспите и попробуйте еще раз.
Если другая сторона спросит, можно ли не использовать режим сна?
В list также есть инструкция blpop, которая блокируется до тех пор, пока не придет сообщение, когда сообщения нет. Если другая сторона спросит, можно ли это произвести один раз и много раз потреблять? Используя шаблон подписчика темы публикации/подписки, можно реализовать очередь сообщений 1:N.
Каковы недостатки pub/sub, если другая сторона спросит?
В случае, когда потребители находятся в автономном режиме, созданные сообщения будут потеряны, и необходимо использовать профессиональные очереди сообщений, такие как RabbitMQ.
Если другая сторона спросит, как Redis реализует очередь задержки?
Думаю, прямо сейчас вы хотите забить интервьюера до смерти.Если у вас в руке бейсбольная бита, почему вы спрашиваете так много подробностей. Но вы были очень сдержанны, а затем спокойно ответили: используйте sortedset, используйте метку времени в качестве оценки, содержимое сообщения в качестве ключа, вызовите zadd для создания сообщений, а потребители используйте команду zrangebyscore для получения данных опроса N секунд назад для обработки. В этот момент интервьюер тайно показал вам большой палец вверх. Но чего он не знал, так это того, что в тот момент, когда ты поднял средний палец за стулом.
40. Использовали ли вы распределенную блокировку Redis, что это такое?
Сначала используйте setnx, чтобы захватить блокировку, а после ее захвата используйте expire, чтобы добавить время истечения срока действия блокировки, чтобы блокировка не забыла снять.
В это время другая сторона сообщит вам, что вы ответили правильно, а затем спросит, происходит ли неожиданный сбой процесса или перезапуск обслуживания после выполнения setnx до истечения срока действия.
На этот раз вам предстоит дать неожиданный отзыв: увы, да, эта блокировка никогда не будет снята. Потом нужно почесать в затылке, сделать вид, что задумался, как будто следующий результат продумали вы, а потом ответить: я помню, что у команды set очень сложные параметры, для этого надо уметь использовать setnx и expire Синтезируйте одну инструкцию для использования! Другой участник в это время покажет улыбку, и он начнет медитировать в своем сердце: Пресса, этот ребенок неплох.
Суммировать:
Вышеприведенное суммирует 40 общих вопросов для интервью, которые часто встречаются на собеседованиях.Помимо общих вопросов для интервью, связанных с readis, здесь также обобщены вопросы из серии интервью jvm, mybatis, spring и других.Друзья, нуждающиеся в помощи, могут обратить внимание на Публичный номер WeChat: место сбора Java-программистов.