Быстрый старт и применение Redis

Redis задняя часть Микросервисы Архитектура

Автор|Чжан Хуэйцин, Ян Ли Редактор|Утада Хикару

В конце статьи есть демо-загрузка.

Сложно ли использовать Redis? Не сложно, легко ли использовать Redis? нелегко.Хотя использование Redis несложно, сценарии приложений в сочетании с бизнесом особенно многочисленны и очень напряжены, и его нелегко использовать. Мы надеемся, что с помощью статьи и демонстрации вы сможете легко и быстро начать работу и научиться подавать заявки. 1. Введение в Redis

Redis — это хранилище ключей-значений с открытым исходным кодом, но это не просто хранилище ключей-значений.По словам официального веб-сайта, Redis — это хранилище структур данных, которое можно использовать в качестве базы данных, кэша и промежуточного программного обеспечения сообщений. По сравнению с традиционным хранилищем ключей и значений Memcached, Redis имеет следующие характеристики:

  • высокоскоростной

  • Богатые структуры данных, кроме String есть List, Hash, Set, Sorted Set

  • Один поток, позволяющий избежать потребления производительности при переключении потоков и блокировках

  • атомарная операция

  • Постоянство (RDB и AOF)

  • Опубликовать/подписаться

  • Поддержка Lua-скриптов

  • Распределенная блокировка

  • дела

  • Репликация master-slave и высокая доступность (Redis Sentinel)

  • Кластер (версия 3.0 и выше)

    2. Структура данных Redis

    1. Строка

    Это самый простой тип Redis. Если используется только этот тип, Redis действует как постоянный сервер Memcached.

    2. Список

    Список Redis реализован на основе двусвязного списка и может поддерживать обратный поиск и обход.

    Распространенные случаи: система чата, получение последних сообщений пользователей в социальной сети, простая очередь сообщений, список новостей с разбивкой на страницы, система комментариев блога.

    3. Хэш

    Hash — это таблица сопоставления между полями и значениями типа String, см. рисунок ниже, аналогичная Hashtable и Dictionary в .NET. В основном используется для хранения объектов, он может избежать накладных расходов на сериализацию и проблем с одновременным управлением модификацией.

    4. Установить

    Set также является списком, но его особенностью является то, что он может автоматически переупорядочиваться: когда вам нужно сохранить список данных и вам не нужны дубликаты, Set — хороший выбор (например, набор идентификаторов). И Set предоставляет интерфейс для определения того, находится ли элемент в коллекции Set, которая также недоступна в List.

    5. Отсортированный набор

    Сценарии использования Sorted Set и Set аналогичны, разница в том, что Sorted Set будет автоматически сортироваться в соответствии с предоставленным параметром оценки. Если вам нужен упорядоченный и неповторяющийся список наборов, вы можете выбрать структуру данных Sorted Set. Распространенный вариант использования: таблицы лидеров в играх.

    3. Важные особенности Redis

    Следующие функции сосредоточены на конвейерах и транзакциях.

    1. Трубопровод

    Конвейер Redis означает, что клиент может отправлять на сервер несколько команд одновременно, а затем сервер возвращает все результаты одновременно. Конвейерная технология может значительно сократить накладные расходы на передачу по сети и повысить производительность при пакетном выполнении команд.

    2. Дела

    Транзакция Redis — это набор команд. Команды в транзакции выполняются либо все, либо ни одна из них. Если во время выполнения команды возникает ошибка, она не будет автоматически откатана.

    Отличие пайплайна от транзакции: пайплайн это в основном оптимизация в сети.Клиент буферизует набор команд и отправляет их на сервер для выполнения в один момент времени, но это не гарантирует, что команды будут выполняться в одна и та же транзакция; хотя транзакция является атомарной, ее можно проверить, чтобы никакие команды от других клиентов не были вставлены в последовательность команд при выполнении команды.

    3. Распределенная блокировка

    Распределенные блокировки — это способ управления синхронизированным доступом к общим ресурсам между распределенными системами. В распределенных системах часто необходимо согласовывать свои действия.Если разные системы или разные хосты одной системы совместно используют один или набор ресурсов, часто требуется взаимное исключение для предотвращения взаимных помех при доступе к этим ресурсам.Для обеспечения согласованности, в В этом случае необходимо использовать распределенные блокировки.

    4. Географическая информация

    Начиная с Redis 3.2, были добавлены команды, связанные с географической информацией, которые могут хранить информацию о географическом местоположении (широте и долготе), предоставленную пользователем, и работать с этой информацией.

    4. Как использовать

    Шаг 1. Ссылка на FxCommon.dll и Redis.dll в проекте, в котором необходимо использовать Redis.

    Шаг 2. Добавьте следующую конфигурацию в файл App.config или Web.config.:

    <add key="RedisServerIP" value="redis:uuid845tylabc123@139.198.13.12:4125"/>
    <!-- 提供的 Redis 环境是单机版配置。如果 Redis 是主从配置,则还需设置 RedisSlaveServerIP-->
    <!--<add key="RedisSlaveServerIP" value="redis:uuid845tylabc123@139.198.13.13:4125"/>--> 
    
    <!--Redis 数据库。如果不需要指定 Redis 数据库,就配置默认值 0-->     
    <add key="RedisDefaultDb" value="0"/>скопировать код

    Шаг 3. Используйте класс PooledRedisClientManager для создания пула соединений Redis:

    // 读取 Redis 主机 IP 配置信息
    string[] redisMasterHosts = ConfigurationManager.ConnectionStrings["RedisServerIP"].ConnectionString.Split(','); 
    
    // 如果 Redis 服务器是主从配置,那么还需要读取 Redis Slave 机的 IP 配置信息
    string[] redisSlaveHosts = null;
    var slaveConnection = ConfigurationManager.ConnectionStrings["RedisSlaveServerIP"];
    if (slaveConnection != null && !string.IsNullOrWhiteSpace(slaveConnection.ConnectionString))
    {    
        string redisSlaveHostConfig = slaveConnection.ConnectionString;    
        redisSlaveHosts = redisSlaveHostConfig.Split(',');
    } 
    
    // 读取 RedisDefaultDb 配置
    int defaultDb = 0;
    string defaultDbSetting = ConfigurationManager.AppSettings["RedisDefaultDb"];
    if (!string.IsNullOrWhiteSpace(defaultDbSetting))
    {    
        int.TryParse(defaultDbSetting, out defaultDb);
    } 
    
    var redisClientManagerConfig = new RedisClientManagerConfig
    {    
        MaxReadPoolSize = 50,    
        MaxWritePoolSize = 50,    
        DefaultDb = defaultDb
    };
    
    // 创建 Redis 连接池
    Manager = new PooledRedisClientManager(redisMasterHosts, redisSlaveHosts, redisClientManagerConfig)
    {    
        PoolTimeout = 2000,    
        ConnectTimeout = 500                
    };скопировать код

    Шаг 4. Получите клиент Redis через экземпляр PooledRedisClientManager, а затем вы можете начать работать через API клиента Redis.

    5. Другие

    5.1, Соглашение об именовании ключей Redis

    Соглашение об именовании ключей Redis: AppID:KeyName.

    Может быть много людей, которые привыкли использовать точку в английском состоянии в качестве разделителя между AppID и KeyName, и автор рекомендует использовать двоеточие в качестве разделителя между AppID и KeyName, Причина в том, что таким образом будет отображаться Redis Key в AppID в качестве категории.В Redis Desktop Manager вы можете быстро найти значение Redis, соответствующее ключу Redis, который вы хотите проверить, как показано на рисунке ниже:

    Но если в качестве разделителя используется точка в английском состоянии, то в Redis Desktop Manager ключ Redis не будет классифицироваться, см. следующий рисунок:

    5.2. Распространенные проблемы с приложениями

    • Обработка проникновения в кэш: Что такое проникновение в кеш? После запроса в кеше в соответствии с ключом Redis, если нет соответствующего значения, его следует искать во внутренней системе, такой как БД.Как только объем параллельных запросов ключа увеличится, это вызовет большую нагрузку на БД .РешениеЕсть: а) внешний контроль рисков, исключающий злонамеренное проникновение; б) результат запроса по-прежнему кэшируется, но время кэширования будет установлено очень коротким, обычно несколько минут.

    • Обработка кэш-памяти: Что такое лавина кеша? Когда сервер кеша перезапускается или большое количество кешей выходит из строя в течение определенного периода времени, это также оказывает большое давление на серверную систему (например, БД) в случае ее сбоя.РешениеЕсть: ограничение на количество подключений к серверу, ограничение порога ошибки, время ожидания обработки, равномерно распределенное время аннулирования кеша, интерфейс никогда не дает сбоев и внутреннее активное обновление.

    • продолжительность кеша: Стратегическое позиционирование сложно и требует многомерных расчетов.

    • инвалидация кеша: Сбой вовремя, сбой события, активное обновление серверной частью.

    • кеш-ключ: Хэш, правило, префикс + Хэш, нештатные ситуации можно вмешиваться вручную.

    • Lua-скрипт: Возможности пакетной обработки и транзакций на стороне сервера, масштабируемые сценарии с условной логикой. Преимущества его использования: снижение нагрузки на сеть, атомарные операции и возможность повторного использования.

    • Limit: скользящее временное окно, если применяется к сеансу, Memcached должен каждый раз передавать ключ и значение.

      6. Загрузка демоверсии и дополнительная информация
      • Адрес загрузки RedisDemo:

        https://github.com/das2017/RedisDemo

      • RedisDesktopУправление адресом загрузки:

        https://redisdesktop.com/

      • Официальный сайт Redis:

        https://redis.io/

      • Клиент ServiceStack.Redis:

        https://github.com/ServiceStack/ServiceStack.Redis

      • Команды Redis:

        http://www.redis.cn/commands.html

      Список контента, задействованного в этой серии статей, выглядит следующим образом, если вам интересно, обратите внимание:

      об авторе

      Чжан Хуэйцин, ветеран ИТ с более чем 10-летним стажем, последовательно работал архитектором Ctrip, главным архитектором Guda Group и техническим директором Zhongqing Yiyou, а также руководил модернизацией и преобразованием технической структуры двух компаний. . Теперь сосредоточьтесь на архитектуре и инженерной эффективности, сочетании и интеграции технологий и бизнеса, ценности технологий и инновациях.

      Ян Ли, обладающая многолетним опытом исследований и разработок систем интернет-приложений, работала в Guda Group и в настоящее время является системным архитектором Zhongqing Yiyou.Она в основном отвечает за архитектурный дизайн бизнес-системы центра исследований и разработок компании. , а также накопление и обучение новым технологиям. На данном этапе основное внимание уделяется программному обеспечению с открытым исходным кодом, архитектуре программного обеспечения, микросервисам и большим данным.

      Рекомендуемое чтение

      Работа по планированию задач для малых и средних команд R&D Практика архитектуры

      Аутентификация микросервиса на основе STS и JWT

      Как сделать мониторинг приложений?


      Международная архитектура архитектуры, архитектура платформы больших данных, микросервисная архитектура, архитектура баз данных и т. д. На этот глобальный саммит архитекторов мы приглашаем Microsoft, Google, Facebook, Twitter, Uber, Tumblr, Twitch, Snapchat и других старших архитекторов. Учитель рассеет ваши сомнения. по одному. В настоящее время на конференцию действует скидка 10 % на регистрацию, сотни технических кейсов, добро пожаловать по ссылкечитать оригиналучиться.