Автор|Чжан Хуэйцин, Ян Ли Редактор|Утада Хикару
Сложно ли использовать Redis? Не сложно, легко ли использовать Redis? нелегко.Хотя использование Redis несложно, сценарии приложений в сочетании с бизнесом особенно многочисленны и очень напряжены, и его нелегко использовать. Мы надеемся, что с помощью статьи и демонстрации вы сможете легко и быстро начать работу и научиться подавать заявки. 1. Введение в RedisВ конце статьи есть демо-загрузка.
Redis — это хранилище ключей-значений с открытым исходным кодом, но это не просто хранилище ключей-значений.По словам официального веб-сайта, Redis — это хранилище структур данных, которое можно использовать в качестве базы данных, кэша и промежуточного программного обеспечения сообщений. По сравнению с традиционным хранилищем ключей и значений Memcached, Redis имеет следующие характеристики:
-
высокоскоростной
-
Богатые структуры данных, кроме String есть List, Hash, Set, Sorted Set
-
Один поток, позволяющий избежать потребления производительности при переключении потоков и блокировках
-
атомарная операция
-
Постоянство (RDB и AOF)
-
Опубликовать/подписаться
-
Поддержка Lua-скриптов
-
Распределенная блокировка
-
дела
-
Репликация master-slave и высокая доступность (Redis Sentinel)
-
Кластер (версия 3.0 и выше)
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 должен каждый раз передавать ключ и значение.
-
Адрес загрузки 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
Список контента, задействованного в этой серии статей, выглядит следующим образом, если вам интересно, обратите внимание:
-
Открытие:Три ключевых момента практики структуры команды малых и средних НИОКР
-
Кэш Редис
-
Очередь сообщений RabbitMQ:Как использовать очередь сообщений RabbitMQ?
-
Централизованный журнал ELK
-
Работа по планированию задач:Работа по планированию задач для малых и средних команд R&D Практика архитектуры
-
Метрики мониторинга приложений:Как сделать мониторинг приложений?
-
Платформа микросервисов MSA
-
Инструмент поиска Solr
-
Распределенный координатор ZooKeeper
-
мелкие инструменты:
Dapper.NET/EmitMapper/AutoMapper/Autofac/NuGet
-
Инструмент публикации Jenkins
-
Общий архитектурный проект:Как электронная коммерция влияет на общую структуру предприятия?
-
Единый архитектурный проект
-
Унифицированное многоуровневое приложение:Как стандартизировать все прикладные уровни в компании?
-
Средство отладки WinDbg
-
войти
-
Корпоративный платежный шлюз
-
Вывод
Чжан Хуэйцин, ветеран ИТ с более чем 10-летним стажем, последовательно работал архитектором Ctrip, главным архитектором Guda Group и техническим директором Zhongqing Yiyou, а также руководил модернизацией и преобразованием технической структуры двух компаний. . Теперь сосредоточьтесь на архитектуре и инженерной эффективности, сочетании и интеграции технологий и бизнеса, ценности технологий и инновациях.
Ян Ли, обладающая многолетним опытом исследований и разработок систем интернет-приложений, работала в Guda Group и в настоящее время является системным архитектором Zhongqing Yiyou.Она в основном отвечает за архитектурный дизайн бизнес-системы центра исследований и разработок компании. , а также накопление и обучение новым технологиям. На данном этапе основное внимание уделяется программному обеспечению с открытым исходным кодом, архитектуре программного обеспечения, микросервисам и большим данным.
Рекомендуемое чтениеРабота по планированию задач для малых и средних команд R&D Практика архитектуры
Аутентификация микросервиса на основе STS и JWT
Как сделать мониторинг приложений?
Международная архитектура архитектуры, архитектура платформы больших данных, микросервисная архитектура, архитектура баз данных и т. д. На этот глобальный саммит архитекторов мы приглашаем Microsoft, Google, Facebook, Twitter, Uber, Tumblr, Twitch, Snapchat и других старших архитекторов. Учитель рассеет ваши сомнения. по одному. В настоящее время на конференцию действует скидка 10 % на регистрацию, сотни технических кейсов, добро пожаловать по ссылкечитать оригиналучиться.