Кэш redis что это

Обновлено: 04.07.2024

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

Перечислим главные принципы Redis:

  • Производительность. Redis действительно быстрый. Утилита redis-benchmark (вы найдете ее в папке вместе с остальными бинарными файлами) покажет насколько. Например, операции get и set в количестве 100 тысяч запросов выполняются чуть больше чем за секунду.
  • Персистентность. Redis сохраняет снимки базы данных на диск. Можно настроить период сохранения данных в зависимости от количества обновленных значений. Также можно использовать режим дозаписи. Для случаев когда, например, Redis используется в качестве кэша, сохранение на диск можно отключить вовсе.
  • Структуры данных. Это то, из-за чего многие не хотят называть Redis хранилищем ключ-значение. Дело в том, что он умеет хранить не только пары строка-строка. Redis поддерживает шесть типов данных и различные операции над ними. В следующем разделе мы обсудим каждый из этих типов.
  • Распределенность. Оперативной памяти одного сервера может не хватить для использования Redis в серьезном приложении. Тут вам поможет Redis Cluster. Он поддерживает шардирование, репликацию, отказоустойчивость и другие полезные возможности из мира распределенных систем. Настройкой кластера Redis мы займемся в другой раз.

Redis хранит в себе пары ключ-значение. Ключом должен быть строковый литерал, но в качестве значения можно использовать один из шести доступных типов. Чтобы понимать для каких сценариев подходит Redis, нужно разобраться в том, что это за типы и какие операции с ними возможны.

Ключи

Ключ — всегда строка. Тем не менее есть несколько важных моментов и рекомендаций, которые нужно знать при работе с ключами:

  • Не следует использовать очень длинные ключи. Чем ключ длиннее, тем дольше производится поиск по нему. Мегабайтный массив – плохой вариант для ключа.
  • Не стремитесь сократить ключ, во что бы то не стало. Используйте читаемые имена, чтобы можно было понять, какую сущность хранит этот ключ.
  • Старайтесь придерживать схемы. Хорошая практика – использовать единую схему для ваших ключей. Разделяйте сущности в названии двоеточиями, а названия из нескольких слов – дефисами или точками. Пример: users:1000:best-friends.
  • На ключ есть ограничение по размеру: 512 Mb.

Строки

В качестве строк может использоваться все, что угодно. Сохраняйте числа, JSON, байты изображения или что-нибудь еще. Тем не менее набор операций для работы с этим типом данных ограничен, поэтому, например, извлечь нужное значение из JSON вам не удастся.

Чтобы добавить в хранилище новое строковое значение, используйте команду set.

Для того, чтобы получить строку по ключу — команду get.

Отметим, что set обновит значение, если такой ключ существует, причем вне зависимости от того, значение какого типа хранилось до этого. Это поведение можно изменить, используя опции nx — создать только, если такого ключа нет, и xx — создать (обновить) только, если ключ существует.

Если в качестве строки используется число, то можно использовать команды incr, decr и incrby, decrby. Первая пара увеличивает и уменьшает число на единицу, вторая делает это на заданное число.

Если строка не является числом, то операция вернет ошибку.

Общие команды

В Redis есть набор команд, которые можно применять к любому типу данных:

  • exists — возвращает 1, если ключ существует и 0, если нет.
  • del - удаляет ключ.
  • type - возвращает тип значения по ключу.
  • expire - удаляет ключ по прошествии указанного времени.
  • ttl - возвращает число: сколько времени осталось ключу до удаления.

С полным перечнем команд Redis можно ознакомиться на официальном сайте.

Списки

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

С помощью команд lpush и rpush элементы добавляются в начало и конец списка. Если ключ не существует, то сначала создается пустой список с таким ключом, а затем в него добавляется элемент. Такое поведение предусмотрено для всех видов коллекций.

Команда lrange возвращает подмножество списка по заданным индексам. При этом знать длину списка не обязательно, так как можно использовать отрицательные индексы. Например, чтобы вернуть весь список, используйте команду:

Команда lrange не удаляет элементы из списка. Чтобы извлечь, при этом удалив элемент, используйте команды lpop и rpop. При удалении последнего элемента из коллекции список также удаляется. Если после этого использовать команду llen, которая возвращает длину списка, то она вернет такое значение, как если бы коллекция была пустой.

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

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

Получение значения по ключу осуществляется с помощью команды hget, получить все пары же можно командой hgetall.

Хеши — мощный инструмент, они подходят для самых разных сценариев работы с Redis.

Множества

Множества в Redis — неупорядоченные наборы строк. Они поддерживают стандартные операции между множествами, такие как пересечение, объединение, разность и другие. Для добавления элементов в множество используйте команду sadd.

Некоторые операции над множествами:

Упорядоченные множества

Упорядоченные множества — симбиоз обычных множеств и списков. Дело в том, что они содержат только уникальные значения, но каждому значению соответствуют число (score). В результате для это типа данных вводится порядок:

  • A > B, если A.score > B.score
  • если A.score = B.score, то A и B упорядочиваются в соответствии с лексикографическим порядком значений. Так как они уникальны, равенство двух различных элементов в упорядоченном множестве невозможно.

Чтобы добавить новые элементы используйте команду zadd, а для получения всех элементов в порядке возрастания — zrange:

Если нужен обратный порядок для элементов упорядоченного множества, то есть команда zrevrange:

Мы обсудили пять типов данных в Redis. Есть также шестой тип, он называется HyperLogLogs. Он необходим для быстрого подсчета уникальных элементов. Пример использования этого типа: подсчет уникальных запросов в поисковой системе.

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

  • Не пытаться закэшировать все. Кэширование нужно, чтобы сократить количество обращений к основному хранилищу. Однако, совсем от них избавиться не удастся. Поэтому не нужно пытаться поместить в кэш ответы на любой запрос. Пусть там хранятся ответы на самые частые запросы – нужно выдерживать грань.
  • Не бояться дублирующихся данных в кэше. Подход к хранению информации в кэше отличается от применяющегося в реляционной модели, где данные должны быть нормализованы и быть в единственном экземпляре. В некоторых случаях засчет дублирования информации можно значительно выиграть в скорости, а это принципиально важно для кэша.
  • Инвалидация кэша. Нужно понимать, в какой момент данные из кэша должны исчезнуть или обновиться. Redis поддерживает идею TTL (Time To Live), в которой ключи удаляются по прошествии определенного времени. В реальных проектах стоит использовать эту парадигму; в своем проекте я буду удалять данные, при соответствующих операциях в базе данных. Проблема такого подхода в том, что за всем не уследишь, и в какой-то момент в кэше станет слишком много невалидных данных. Но для учебного проекта это не страшно.

Чтобы выполнять команды в конкретной базе данных (в нашем случае дефолтной), используется метод GetDatabase()

Обертки для команд реализуются с помощью клиента Redis очень просто. Вот пара примеров:

Не забудем, что хорошей практикой является выбор читаемых названий для ключей. Для этого составим простую схему:

Теперь используем созданный класс в методах обращения к базе данных. Сначала добавим кэширование для получения объектов по идентификатору:

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

Кэширование ленты новостей можно реализовать с помощью списка. Список хранит только идентификаторы объектов, поэтому при их обновлении не нужно менять список. При каждом создании поста новый айди добавляется в начало списка и производится операция trim, обрезающая ленту до необходимого числа элементов. При удалении постов кэш для ленты сбрасывается.

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

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

Пока же вы можете почитать в блоге на Хабре, как мы использовали другую NoSQL базу данных, которая называется Elasticsearch, для реализации полнотекстового поиска.

AWS предлагает два полностью управляемых сервиса для запуска Redis. Amazon MemoryDB for Redis – совместимый с Redis надежный сервис базы данных в памяти, который обеспечивает сверхбыструю производительность. Amazon ElastiCache for Redis – полностью управляемый сервис кэширования, который ускоряет доступ к данным из первичных баз данных и хранилищ с микросекундной задержкой. Более того, ElastiCache также предлагает поддержку Memcached, другой популярной системы кэширования с открытым исходным кодом.

Подробную информацию об ускорении приложений с Amazon ElastiCache for Redis см. в онлайн-вебинаре Tech Talk.

Преимущества Redis

Производительность

Все данные Redis хранятся в памяти, что обеспечивает низкую задержку и высокую пропускную способность доступа к данным. В отличие от традиционных баз данных, хранилища данных в памяти не требуют перемещения на диск, что сокращает задержку ядра до микросекунд. Благодаря этому хранилища данных в памяти могут многократно увеличивать количество выполняемых операций и сокращать время отклика. В результате обеспечивается чрезвычайно высокая производительность. Операции чтения и записи в среднем занимают менее миллисекунды, скорость работы достигает миллионов операций в секунду.

Гибкие структуры данных

В отличие от других хранилищ на основе пар «ключ – значение», которые поддерживают ограниченный набор структур данных, Redis поддерживает огромное разнообразие структур данных, позволяющее удовлетворить потребности разнообразных приложений. Типы данных Redis включают:

Простота и удобство

Репликация и постоянное хранение

В Redis применяется архитектура узлов «ведущий‑подчиненный» и поддерживается асинхронная репликация, при которой данные могут копироваться на несколько подчиненных серверов. Это обеспечивает как улучшенные характеристики чтения (так как запросы могут быть распределены между серверами), так и ускоренное восстановление в случае сбоя основного сервера. Для обеспечения постоянного хранения Redis поддерживает снимки состояния на момент времени (копирование наборов данных Redis на диск).

Redis не задуман как надежная и стабильная база данных. Если вам нужна надежная и совместимая с Redis база данных, рассмотрите Amazon MemoryDB for Redi s . Поскольку MemoryDB использует надежный журнал транзакций, в котором хранятся данные нескольких зон доступности (AZ), вы можете задействовать ее в качестве основной базы данных. MemoryDB специально создана для того, чтобы разработчики могли работать с API Redis, не беспокоясь об управлении отдельным кэшем, базой данных или базовой инфраструктурой.

Высокая доступность и масштабируемость

Redis предлагает архитектуру «ведущий‑подчиненный» с одним ведущим узлом или с кластерной топологией. Это позволяет создавать высокодоступные решения, обеспечивающие стабильную производительность и надежность. Если требуется настроить размер кластера, доступны различные варианты вертикального и горизонтального масштабирования. В результате можно наращивать кластер в соответствии с потребностями.

Инструменты с открытым исходным кодом

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

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

Кэш Azure для Redis предлагает как управляемую службу Redis с открытым кодом (OSS Redis) и коммерческий продукт от Redis Labs (Redis Enterprise). Он предоставляет защищенные и выделенные экземпляры сервера Redis и полную совместимость с Redis API. Служба обслуживается корпорацией Майкрософт, размещается в Azure и может использоваться любым приложением в среде Azure и за ее пределами.

Основные сценарии

Кэш Azure для Redis повышает производительность приложений за счет поддержки стандартных шаблонов архитектуры приложений. Ниже перечислены некоторые наиболее распространенные шаблоны.

Версии Redis

Кэш Azure для Redis поддерживает OSS Redis версии 4.0.x и 6.0.x. Мы решили пропустить Redis 5.0 и предоставить вам последнюю версию. Ранее Кэш Azure для Redis поддерживал одну версию Redis. В будущем он будет обеспечивать поддержку обновления до новой основной версии и по меньшей мере одной предыдущей стабильной версии. Вы можете выбрать версию для своего приложения.

Уровни службы

Кэш Azure для Redis доступен на таких уровнях:

Уровень Описание
Basic Кэш OSS Redis работает на одной виртуальной машине. Этот уровень не имеет Соглашения об уровне обслуживания (SLA) и идеально подходит для разработки, тестирования и некритических рабочих нагрузок.
Standard Кэш OSS Redis работает на двух виртуальных машинах в реплицированной конфигурации.
Premium Высокопроизводительные кэши OSS Redis. Этот уровень обеспечивает более высокую пропускную способность, меньшую задержку, лучшую доступность и другие функции. Кэш уровня "Премиум" развертывается на более мощных виртуальных машинах, если сравнивать с уровнями "Базовый" и "Стандартный".
Предприятие Высокопроизводительные кэши на основе программного обеспечения Redis Enterprise Redis Labs. Этот уровень поддерживает модули Redis, включая RediSearch, RedisBloom и RedisTimeSeries. Он также обеспечивает еще больший уровень доступности, чем уровень "Премиум".
Enterprise Flash Большие рентабельные кэши на основе программного обеспечения Redis Enterprise Redis Labs. Этот уровень расширяет хранилище данных Redis на виртуальной машине до энергонезависимой памяти, которая является менее затратной, чем DRAM. Это снижает общую стоимость памяти за один ГБ.

Сравнение возможностей

Описание функции Basic Standard Premium Предприятие Enterprise Flash
Соглашение об уровне обслуживания -
Шифрование данных
Сетевая изоляция
Масштабирование - -
Кластеризация OSS - -
Сохраняемость данных - - Preview (Предварительный просмотр) Preview (Предварительный просмотр)
Избыточность в пределах зоны - -
Георепликация - - Preview (Предварительный просмотр) Preview (Предварительный просмотр)
Модули Redis - - - -
Импорт и экспорт - -
Перезагрузка - -
Запланированные обновления - -

Выбор подходящего уровня

При выборе Кэша Azure для уровня Redis необходимо учитывать следующее:

  • Память. Уровни "Базовый" и "Стандартный" предлагают 250 МБ — 53 Гб; уровень "Премиум" — 6 ГБ — 1,2 ТБ; уровни "Корпоративный" — 12 ГБ — 14 ТБ. Для создания кэша уровня "Премиум" с размером более 120 ГБ можно использовать кластеризацию OSS Redis. Дополнительные сведения см. на странице Цены на Кэш Azure для Redis. Дополнительные сведения см. в статье How to configure clustering for a Premium Azure Cache for Redis (Настройка кластеризации кэша Azure для Redis категории "Премиум").
  • Производительность — Кэши на уровнях "Премиум" и "Корпоративный" развертываются на оборудовании с более быстрыми процессорами, обеспечивая лучшую производительность по сравнению с уровнем "Базовый" или "Стандартный". Кэши уровня Премиум обладают более высокой пропускной способностью и меньшей задержкой. Дополнительные сведения см. в разделе Производительность кэша Azure для Redis.
  • Выделенное ядро для сервера Redis. Все кэши, за исключением C0, запускают выделенные ядра виртуальных машин. По умолчанию Redis использует для обработки команд только один поток. Кэш Azure для Redis использует другие ядра для обработки операций ввода-вывода. Наличие большего количества ядер повышает пропускную способность, даже если это не приводит к линейному масштабированию. Кроме того, ВМ больших размеров, как правило, имеют более высокий предел пропускной способности, чем ВМ меньшего размера. Это поможет избежать насыщенности сети, что приведет к превышению времени ожидания в приложении.
  • Производительность сети. Если у вас есть рабочая нагрузка, которая требует высокой пропускной способности, то уровень "Премиум" или "Корпоративный" предоставит большую пропускную способность по сравнению с уровнем "Стандартный" или "Базовый". Также в рамках каждого уровня пропускная способность для кэшей большего размера выше из-за виртуальной машины, на которой размещен кэш. Дополнительные сведения см. в разделе Производительность кэша Azure для Redis.
  • Максимальное число подключений клиентов. Уровни "Премиум" и "Корпоративный" обеспечивают максимальное число клиентов, которые могут подключаться к Redis, причем чем больше размер кэша, тем больше число подключений. Кластеризация увеличивает общий объем пропускной способности сети, доступной для кластеризованного кэша.
  • Высокий уровень доступности. Кэш Azure для Redis предоставляет несколько вариантов высокого уровня доступности. Он гарантирует, что кэш уровня "Стандартный", "Премиум" или "Корпоративный" будет доступен в соответствии с Соглашением об уровне обслуживания. Соглашение об уровне обслуживания распространяется только на подключения к конечным точкам кэша. Соглашение об уровне обслуживания не включает защиту от потери данных. Для повышения устойчивости к потере данных рекомендуется использовать функцию постоянного хранения данных Redis уровня "Премиум" и "Корпоративный".
  • Сохраняемость данных. Уровни "Премиум" и "Корпоративный" позволяют сохранять данные кэша в учетной записи хранения Azure и на управляемом диске соответственно. Проблемы с базовой инфраструктурой могут привести к потере данных. Для повышения устойчивости к потере данных рекомендуется использовать функцию постоянного хранения данных Redis. Кэш Azure для Redis предлагает варианты RDB и AOF (предварительная версия). Сохраняемость данных можно включить с помощью портала Azure и CLI. Дополнительные сведения см. в статье Настройка сохраняемости данных для Кэша Azure для Redis уровня "Премиум".
  • Сетевая изоляция. Развертывание Приватного канала Azure и виртуальной сети (VNET) обеспечивает улучшенную безопасность и изоляцию трафика для кэша Azure для Redis. Виртуальная сеть позволяет дополнительно ограничить доступ с помощью политик управления доступом к сети. Дополнительные сведения см. в статьях Создание кэша Azure для Redis с помощью Приватного канала Azure и Настройка поддержки виртуальной сети для кэша Azure уровня "Премиум" для Redis.
  • Модули Redis. Корпоративные уровни поддерживают RediSearch, RedisBloom и RedisTimeSeries. Эти модули добавляют новые типы данных и функции в Redis.

Вы можете масштабировать кэш после его создания с уровня "Базовый" до уровня "Премиум". Переход на более низкий уровень сейчас не поддерживается. Пошаговые инструкции по масштабированию см. в статье How to Scale Azure Cache for Redis (Масштабирование кэша Azure для Redis) и разделе, посвященному автоматизации операции масштабирования.

Специальные рекомендации для категорий "Корпоративный"

Уровни "Корпоративный" используют Redis Enterprise — коммерческую версию Redis от Redis Labs. Клиенты будут получать и оплачивать лицензию на это программное обеспечение с помощью предложения Azure Marketplace. Кэш Azure для Redis будет способствовать приобретению лицензий, и вам не придется делать это дополнительно. Чтобы делать покупки в Azure Marketplace, необходимо выполнить следующие предварительные требования:

  • У вашей подписки Azure должно быть допустимое платежное средство. Деньги на счете в Azure или бесплатные подписки MSDN не поддерживаются.
  • Ваша организация должна разрешать покупки в Azure Marketplace.
  • Если вы используете частный Marketplace, он должен содержать корпоративное предложение Redis Labs.

Кэш Azure для Redis уровня "Корпоративный" требует использования стандартных сетевых подсистем Load Balancer, плата за которые начисляется отдельно от платы за экземпляры кэша. Дополнительные сведения см. в статье Цены на Load Balancer. Если кэш категории "Корпоративный" настроен для нескольких Зон доступности, плата за передачу данных будет начисляться по тарифам стандартной сетевой пропускной способности с 1 июля 2021 г.

Кроме того, с сохраняемостью данных вы получаете доступ к функции "Управляемые диски". Эти ресурсы можно использовать бесплатно в общедоступной предварительной версии сохраняемости данных для категорий "Корпоративный". После выпуска общедоступной версии функции это может измениться.

Что такое Redis

Изучение

Что такое Redis

Redis — одна из самых популярных баз данных типа «ключ-значение», занимающая 4-е место по удовлетворенности пользователей базами данных NoSQL. Популярность Redis продолжает расти, и многие компании ищут разработчиков Redis на такие должности, как администратор базы данных и другие.

Что такое Redis?

Это расширенное хранилище данных типа «ключ-значение» в NoSQL, которое часто называют сервером структуры данных, поскольку его ключи содержат строки, хэши, списки, наборы, отсортированные наборы, точечные рисунки и гиперлоги. Операции чтения и записи Redis выполняются очень быстро, потому что данные хранятся в памяти. Данные также могут быть сохранены на диске или записаны обратно в память.

Поскольку Redis хранит свои данные в памяти, он чаще всего используется в качестве кеша. Некоторые крупные организации, использующие Redis, — это Twitter, GitHub, Instagram, Pinterest и Snapchat.

Преимущества Redis

Как установить Redis

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

Затем вы можете протестировать свою сборку, набрав make test. srcКаталог будет заполнен исполняемым Redis.

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

  1. sudo make install
  2. Вручную с помощью следующих команд:

Оттуда запустите сервер Redis, выполнив redis-serverдвоичный файл (без аргументов). Поскольку нет явных файлов конфигурации, все параметры используют внутреннее значение по умолчанию. Это лучший способ начать, если вы новичок в Redis и хотите изучить среду.

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

Типы данных Redis

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

Давайте обсудим типы данных, которые поддерживаются в значениях.

String

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

В этом примере SETи GETпредставлены команды Redis, о которых мы поговорим позже. name- это ключ, а educativeэто строковое значение, которое мы храним.

В Redis списки — это списки строк, которые отсортированы по порядку вставки, поэтому элементы хранятся в связном списке. Вы можете добавлять элементы как на голове, так и на хвосте. Если нам нужно вставить элемент в список из 500 записей, это займет столько же времени, сколько и добавление элемента в список из 50 000 записей.

Вот несколько примеров операций для составления списка результирующих списков:

Наборы в Redis — это неупорядоченные коллекции строк. Этот тип значения аналогичен списку, но наборы не допускают дублирования, и элементы не сортируются ни в каком порядке. Вы можете добавлять или удалять участников вО (1)О ( 1 ) временная сложность.

Наборы полезны, когда мы хотим хранить данные, где важна уникальность. Например, сохранение количества уникальных посетителей веб-сайта.

Сортированные наборы

Мы можем сортировать элементы с типом значения Sorted Set. Каждый элемент будет связан с числом, которое мы называем счетом. Это определяет порядок.

Например, если у нас есть вызванный ключ vegetables, и мы хотим сохранить carrotи celeryв качестве значения. Оценка от carrot10 celeryдо 15. Первым будет морковь, затем сельдерей.

Если оценка двух разных элементов одинакова, мы проверяем, какая строка лексикографически больше.

В Redis тип хеш-значения — это пара значений поля. Они используются для представления объектов, но могут хранить множество элементов и полезны также для других задач. Хеш занимает очень мало места, поэтому вы можете хранить миллионы объектов в небольшом экземпляре хеша.

Фактически, хеш может хранить до ^ 2Взаимодействие с другими людьми3 2Взаимодействие с другими людьмиВзаимодействие с другими людьми- 1- 1 пары поле-значение, что составляет более 4 миллиардов.

Допустим, мы хотим хранить информацию об оценках студентов. Тема может быть ключевым. Значение может быть парой «поле-значение», где поле представляет собой имя учащегося, а значение — оценку каждого учащегося.

Вот еще один пример, чтобы познакомить вас с хешем Redis.

Команды Redis

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

Хранение строк в Redis

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

SET команда

Мы можем сохранить запись в Redis с помощью SETкоманды. Это установит ключ для хранения строкового значения. Если ключ уже содержит значение, оно будет перезаписано. Он имеет следующий синтаксис:

GET команда

Команда GETдает нам значение ключа. Если ключ не существует, он вернется nil. GETобрабатывает только строковые значения. Синтаксис:

Хранение списков в Redis

Мы также можем хранить списки, и база данных Redis хранит их в виде связанного списка. Когда мы вставляем новый элемент, мы можем вставить его либо в голову (крайний левый элемент), либо в хвост (крайний правый элемент). Мы рассмотрим две команды, используемые для добавления и удаления записей из головы при использовании списков.

LPUSH команда

Команда LPUSHиспользуется для вставки значения в начало списка. Мы можем использовать одно или несколько значений, а синтаксис следующий:

Примечание. Элементы вставляются в обратном порядке, потому что каждый элемент выбирается и вставляется в начале.

LPOP команда

Команда LPOP используется для удаления элемента из списка в начале (или слева).

Хранение наборов в Redis

Когда дело доходит до списка, мы допускаем дублирование элементов. Итак, если нам нужно добавить уникальные элементы, мы должны использовать набор, который хранится внутри как хеш-таблица. Это означает, что элементы хранятся случайным образом, и повторение не допускается. Давайте посмотрим на команду для добавления элемента из набора Redis.

SADD команда

Это позволяет нам добавлять указанные члены в набор, хранящийся под ключом. Если ключ не существует, создается новый набор.

Хранение отсортированных наборов в Redis

Элементы в наборе Redis не хранятся в каком-либо порядке. Итак, если мы хотим хранить элементы в отсортированном порядке, мы можем использовать отсортированные наборы, также называемые ZSets.

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

ZADD команда

Эта команда добавит элементы в отсортированный набор в базе данных Redis. Мы можем указать несколько пар очков или членов. Если член уже находится в этом отсортированном наборе, оценка обновляется, и элемент повторно вставляется в правильную позицию для сохранения оценки. Вот синтаксис:

Хранение хэша в Redis

В Redis значение также может быть парой «поле-значение», которую мы называем хэш-структурой данных. Давайте посмотрим на команду для хранения хэша в Redis.

HMSET команда

Эта команда используется для хранения хэша в Redis. Он установит для полей соответствующие значения в хэше. Эта команда перезаписывает поля, которые уже существуют в хэше. Синтаксис этой команды:

При использовании Redis 4.0.0 HMSETсчитается устаревшим и HSETпредпочтительным.

Расширенные концепции Redis

Теперь, когда мы понимаем некоторые основы Redis и познакомились с командами, давайте рассмотрим некоторые дополнительные концепции.

Важное примечание о Redis

Для этого урока, вместо терминологии модель / Slave, мы будем использовать прогрессивную leader/ followerметафору. Использование нами этой терминологии не помешает вашему пониманию Redis.

Официальная документация Redis использует модель Master / Slave, которая преобладала в компьютерных науках на протяжении десятилетий, начиная с 1904 года.

В последние годы многие организации предприняли значительные усилия, чтобы противостоять этой проблемной метафоре и заменить ее.

В Educative мы верим в расширение возможностей разработчиков и изменение отрасли к лучшему. Использование инклюзивной терминологии является частью этого культурного сдвига.

Репликация данных в Redis

Когда данные хранятся на сервере и происходит сбой сервера, данные могут быть потеряны. Мы используем технику репликации данных, чтобы избежать этой проблемы. Это в основном означает, что данные хранятся на двух или более серверах, чтобы предотвратить потери или сбои. Репликация данных также снижает нагрузку на наши серверы, поскольку запросы пользователей балансируются по нагрузке.

Redis следует подходу лидера / подчиненного для репликации данных на сервере. Один из серверов — это a leader, а остальные — это серверы followers, которые все подключены к leader. Мы записываем все в каталог leader, который затем отправляет изменения в followers.

Если a followerотключен, он автоматически переподключится и leaderточно воспроизведет. Это можно сделать двумя способами:

  • Частичная синхронизация.
  • Полная синхронизация.

Примечание. В Redis процесс репликации асинхронный. Эти followerсервера асинхронно признают данные из leader, так что leaderзнает, какие команды были обработаны.

Упорство

Поскольку Redis — это база данных в памяти, данные хранятся в памяти (или ОЗУ). Если сервер выходит из строя, все сохраненные данные теряются. Redis имеет механизмы резервного копирования данных на диске. Таким образом, данные загружаются с диска в память при перезагрузке сервера. Redis имеет два варианта сохранения:

  • Сохранение RDB (моментальные снимки): моментальные снимки данных хранятся на диске в dump.rdbфайле. Долговечность зависит от того, как часто данные выгружаются на диск.
  • Сохранение файла только с добавлением (AOF): каждая операция записи, полученная сервером, регистрируется в файле, поэтому все команды в файле AOF запускаются снова при перезагрузке.

Кеширование на стороне клиента

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

Redis обеспечивает поддержку кэширования на стороне клиента, которое называется отслеживанием. Есть два разных подхода:

Что учить дальше

Теперь вы должны хорошо понимать, как работает Redis и что он может сделать для ваших приложений. Это мощный инструмент, популярность которого растет. Любой разработчик должен обладать солидными навыками Redis в своем арсенале инструментов. Но есть еще чему поучиться.

Читайте также: