Распределенный кэш является важным компонентом распределенных систем, он в основном решает проблему производительности при доступе к горячим данным в сценариях с высоким параллелизмом и большими данными, а также обеспечивает высокопроизводительный быстрый доступ к данным.
Обычный сценарий использования кеша: к некоторым данным в проекте часто обращаются, что вызывает нагрузку на нижестоящие БД (такие как MySQL), в этом случае можно использовать кеш для повышения эффективности.Давайте поговорим об основном дизайне различных сценариев применения Redis на предприятиях первого уровня, таких как BAT!
1. Общие команды
Далее давайте рассмотрим часто используемые инструкции для каждой структуры данных.Мы используем таблицу, чтобы показать это наглядно:
2. Анализ сценариев
1.1 строковое хранилище
1.2 Сценарии использования строкового типа
Сценарий 1: Инвентаризация товаров
С точки зрения бизнеса, данные товарных запасов — это горячие данные, и поведение транзакций будет напрямую влиять на запасы. А собственный тип Redis String обеспечивает:
- установить goods_id 10; Установить начальное значение инвентаря товаров с идентификатором как good_id на 10;
- decr goods_id; Когда товар покупается, данные о запасах уменьшаются на 1.
**Сценарии по аналогии: **Количество просмотров товара, количество лайков за вопросы или ответы и т. д. Все такие сценарии подсчета можно реализовать с помощью Redis.
Сценарий 2: Хранение устаревшей информации
Хранилище данных Redis имеет возможность автоматического отказа. То есть сохраненный ключ-значение может установить время истечения срока действия: set(key, value, expireTime).
Например, пользователю необходимо получить код подтверждения для входа в приложение, и код подтверждения действителен в течение 30 секунд. Затем мы можем использовать тип String для хранения кода подтверждения и установить срок действия 30 секунд.
2.1хеш хранения данных
2.2 Сценарии использования хеш-типа
Когда Redis сохраняет объекты (например, информацию о пользователе), ему необходимо сериализовать объекты, а затем сохранить их.
Другая форма — преобразовать данные объекта в данные структуры JSON, а затем сохранить строку JSON в Redis.
Для некоторых типов объектов есть более удобный тип — хранить в соответствии с типом Hash Redis.
Например, мы храним некоторую базовую информацию о пользователях веб-сайта, которую мы можем использовать:
Таким образом, основная информация пользователя сохраняется, а хранимая информация: {имя: Сяо Мин, телефон: «123456», пол: «мужской»}
Конечно, существует множество подобных сценариев, таких как хранение данных о заказах, данных о продуктах и базовой бизнес-информации.В основном корзина Taobao
2.3 Преимущества и недостатки реализации хранилища информации
1. Родной:
- set user: 1:name james;
- set user:1:age 23;
- set user:1:sex boy;
**Плюсы:** Простота и интуитивность, каждая клавиша соответствует значению.
**Недостатки:** Слишком много ключей, занимают много памяти, пользовательская информация слишком разбросана, не используется в производственной среде.
2. Сериализовать объект в
redis set user:1 serial ize (userInfo);
**Преимущества:** Простое программирование, большой объем памяти при использовании сериализации.
** Недостатки: ** Сериализация и десериализация имеют определенные накладные расходы. При обновлении атрибутов вам необходимо удалить всю пользовательскую информацию для десериализации, а затем сериализовать в Redis после обновления.
3. хранилище хэшей:
hmset user:1 name james age 23 sex boy
**Преимущества:** Простое и интуитивно понятное разумное использование может сократить потребление памяти.
**Недостатки:** Для управления преобразованием кодировки между ziplist и хеш-таблицей Mhashtable будет потреблять больше памяти.
3.1 Сценарии использования списка
list — это связанный список строк, отсортированных в порядке вставки. Новые элементы могут быть вставлены в начало и конец (реализовано двусвязным списком, временная сложность добавления элементов в оба конца равна O(1)).
Сценарий 1: Реализация очереди сообщений
В настоящее время существует множество профессиональных компонентов очереди сообщений Kafka, RabbitMQ и т. д. Здесь мы просто используем функцию списка для реализации требований к очереди сообщений. В процессе выбора собственно техники можно хорошенько подумать.
Хранилище списков — это форма хранения очереди:
- lpush значение ключа, добавить строковый элемент в начало списка, соответствующий ключу;
- Ключ rpop; удаляет последний элемент списка, возвращаемое значение — удаленный элемент.
Сценарий 2: Последний товар на полках
На главной странице торгового сайта часто есть модуль, который рекомендует новые товары на полках, этот модуль хранит последние 100 лучших товаров на полках.
В настоящее время структура данных списка Redis используется для хранения ТОП-100 недавно запущенных продуктов.
Инструкция Redis ltrim обрезает список, чтобы он содержал только указанные элементы в указанном диапазоне.
И start, и stop отсчитываются от 0, где 0 — это первый элемент в списке (заголовок), а 1 — второй элемент.
Следующий псевдокод демонстрирует:
4.1 Сценарии использования типа Set
set также хранит функцию списка наборов. В отличие от списка, набор имеет функцию дедупликации. Когда вам нужно сохранить список информации, и в то же время требуется, чтобы элементы в списке не могли повторяться, в этот раз более целесообразно использовать set. В то же время множество также обеспечивает пересечение, объединение и различие.
Например, на торговом веб-сайте мы будем хранить информацию о товарах, которые интересуют пользователей. При анализе похожих пользователей мы можем обеспечить некоторую основу, подсчитав количество интересующих товаров между двумя разными пользователями.
Получите аналогичные продукты от двух пользователей, а затем определите категории похожих продуктов для пользовательского анализа.
Аналогичные сценарии приложений также поддерживаются в социальных сценариях, таких как совместное отслеживание друзей и аналогичные теги интересов.
4.2 Установка команд специального режима
setA={A,B,C} setB={B, C}
1) Пересечение множеств и наборов
спекать setA setB ---> получить набор {B,C}
- союз между множествами и множествами
sunion setA setB ---> получить набор {A,B,C}
3) Отличие сетов от сетов
sdiff setA setB --> получить набор {A}
4.3 Сценарии применения команд специальной операции по сбору наборов
Как реализовать дизайн микроотношений Weibo? (Смотрите видео ароматнее)
5.1 Заказываемый набор Zset
Он часто используется для рейтинговых списков, например, видео-сайты должны составлять рейтинговые списки для видео, загруженных пользователями, или количество лайков связано с коллекцией, и не может быть повторяющихся участников.
5.2 Сценарии использования типа Zset
Наконец
Я использовал XMind, чтобы нарисовать карту для записи заметок об исследовании Redis и некоторого анализа интервью (в исходном файле есть подробные комментарии и справочные материалы для некоторых узлов, пожалуйста, обратите внимание на мой общедоступный номер: заметки об архитектуре Ах Фенга отправить [Redis] в фон для получения ссылки на скачивание был улучшен и обновлен):