Перейти к содержанию

Краткое руководство по Redis

Redis (Remote Dictionary Service) — это система управления базами данных, размещаемая в памяти, которая используется в качестве базы данных, кэша и брокера сообщений, в основном, в роли кеша, находящегося перед другой, «настоящей» базой данных, вроде MySQL или PostgreSQL. Кеш, основанный на Redis, помогает улучшить производительность приложений. Он эффективно использует скорость работы с данными, характерную для памяти, и смягчает нагрузку центральной базы данных приложения, связанную с обработкой следующих данных:

  • Данные, которые редко меняются, к которым часто обращается приложение.
  • Данные, не относящиеся к критически важным, которые часто меняются.

Redis обладает рядом особенностей:

  1. Высокая производительность: Redis может читать и записывать данные очень быстро, так как данные хранятся в оперативной памяти.

  2. Гибкость: Redis поддерживает различные типы данных, что делает его подходящим для множества разных задач.

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

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

Какие основные функции Redis?

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

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

  2. Поддержка различных типов данных: Redis поддерживает сложные типы данных, такие как строки, хэши, списки, множества, отсортированные множества, битовые карты, гиперлоглоги и геопространственные индексы.

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

  4. Транзакции: Redis поддерживает транзакции с помощью команд MULTI, EXEC, DISCARD и WATCH, позволяя группировать команды для последовательного выполнения.

  5. Публикация и подписка: Redis имеет встроенную систему публикации и подписки, которая позволяет клиентам подписываться на каналы и получать сообщения, публикуемые в этих каналах.

  6. Персистентность: Хотя Redis и является системой, ориентированной на хранение данных в памяти, он предлагает настройки для сохранения данных на диск, что позволяет восстановить состояние базы данных после перезагрузки. Redis предлагает различные опции для сохранения данных на диск, такие как точечные снимки (snapshots) и журналирование транзакций с помощью AOF (Append Only File).

  7. Репликация: Redis поддерживает мастер-слейв репликацию, позволяя создавать копии данных для резервного копирования или масштабирования чтения.

  8. Lua скриптинг: Redis позволяет выполнять скрипты на Lua для выполнения сложных операций на сервере.

  9. Управление памятью: Redis предоставляет различные политики вытеснения для управления памятью, когда доступное пространство исчерпано.

  10. Кластеризация: Redis поддерживает кластеры для обеспечения высокой доступности и распределения данных по нескольким узлам.

  11. Безопасность: Redis предлагает функции безопасности, такие как аутентификация паролем и поддержка SSL, для защиты данных.

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

Какие типы данных поддерживает Redis?

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

типы данных Redis

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

  2. Хэши (Hashes): Хэши представляют собой коллекции пар ключ-значение, где ключ и значение являются строками. Это идеально подходит для представления объектов (например, записей с несколькими полями).

  3. Списки (Lists): Списки в Redis — это упорядоченные последовательности строк. Вы можете добавлять элементы в начало или конец списка, а также выполнять операции извлечения на основе индексов. Списки часто используются для реализации очередей.

  4. Множества (Sets): Множества — это наборы строк, где каждый элемент уникален. Redis поддерживает операции, такие как добавление, удаление и проверка наличия элемента, а также операции над множествами, такие как объединение, пересечение и разность.

  5. Отсортированные множества (Sorted Sets): Отсортированные множества, или Z-sets, похожи на множества, но каждый элемент связан с числовым "весом" или "счетом", который используется для упорядочивания элементов от наименьшего к наибольшему.

  6. Битовые карты (Bitmaps): Это специализированный тип данных, который представляет собой массив битов. Они позволяют выполнять операции на уровне отдельных битов, что полезно для трекинга и анализа.

  7. Гиперлоглоги (HyperLogLogs): Это вероятностные структуры данных, используемые для эффективного подсчета уникальных элементов (кардинальности) в больших наборах данных.

  8. Геопространственные индексы (Geospatial Indexes): Redis поддерживает геопространственные индексы, которые позволяют хранить и запросить данные на основе их географического положения.

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

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

Чтобы установить Redis на Linux, вы можете следовать следующим шагам. Обратите внимание, что конкретные команды могут немного отличаться в зависимости от дистрибутива Linux, который вы используете. Здесь представлены инструкции для систем на основе Debian, таких как Ubuntu:

  1. Обновите список пакетов вашего системного менеджера:
      sudo apt update
  1. Установите Redis, используя apt:
sudo apt install redis-server
  1. После установки Redis автоматически запустится как служба. Вы можете проверить статус службы командой:
      sudo systemctl status redis-server
  1. Чтобы убедиться, что Redis запускается при загрузке системы, включите его:
      sudo systemctl enable redis-server
  1. Вы можете начать использовать Redis с помощью его интерфейса командной строки (CLI):
      redis-cli
  1. Для более тонкой настройки Redis вы можете отредактировать его конфигурационный файл, который обычно находится в /etc/redis/redis.conf. После внесения изменений перезапустите Redis, чтобы применить новую конфигурацию:
      sudo systemctl restart redis-server

Как узнать версию Redis, установленную на моей системе?

Чтобы узнать версию Redis, установленную на вашей системе, вы можете использовать команду redis-cli с опцией --version. Откройте терминал и введите следующую команду:

redis-cli --version
Эта команда выведет информацию о версии redis-cli, которая обычно совпадает с версией установленного сервера Redis. Если вы хотите узнать версию сервера Redis, вы можете подключиться к серверу с помощью redis-cli и выполнить команду INFO. Например:

redis-cli

После подключения к серверу Redis, введите команду:

INFO server

Это выведет информацию о сервере, включая версию Redis в строке redis_version.

Как удалить Redis с моей системы?

Для удаления Redis с вашей системы Linux, выполните следующие шаги. Обратите внимание, что эти шаги могут отличаться в зависимости от вашего дистрибутива Linux. Ниже приведены инструкции для систем на основе Debian, таких как Ubuntu:

  1. Остановите службу Redis:
      sudo systemctl stop redis-server
  1. Отключите автоматический запуск Redis при загрузке системы:
      sudo systemctl disable redis-server
  1. Удалите пакеты Redis:
      sudo apt-get purge redis-server
  1. Удалите все данные и конфигурации Redis:
   sudo rm -rf /var/lib/redis
   sudo rm -rf /etc/redis
  1. Обновите кэш пакетов, чтобы удалить информацию о старых пакетах:
   sudo apt-get autoremove
   sudo apt-get autoclean

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

Как настроить пароль для доступа к Redis?

Чтобы настроить пароль для доступа к Redis, вам нужно будет обновить его конфигурационный файл и установить директиву requirepass. Вот шаги, которые вы должны выполнить:

  1. Откройте конфигурационный файл Redis для редактирования. Конфигурационный файл обычно находится по пути /etc/redis/redis.conf:
      sudo nano /etc/redis/redis.conf

Вы можете использовать любой текстовый редактор вместо nano, если предпочитаете.

  1. Найдите директиву requirepass в конфигурационном файле. Если она закомментирована (начинается с #), удалите символ комментария.

  2. Установите пароль, который вы хотите использовать, следующим образом:

      requirepass yourpassword

Замените yourpassword на пароль, который вы хотите установить.

  1. Сохраните изменения и закройте редактор.

  2. Перезапустите службу Redis, чтобы применить изменения:

      sudo systemctl restart redis-server

Теперь, когда вы попытаетесь подключиться к Redis с помощью redis-cli или любого другого клиента, вам будет необходимо аутентифицироваться с помощью установленного пароля. Вы можете сделать это, выполнив команду AUTH в redis-cli:

    redis-cli
    AUTH yourpassword

Убедитесь, что ваш пароль достаточно сложный и безопасный, чтобы предотвратить несанкционированный доступ к вашему серверу Redis.

Подключение к Redis

Для подключения к Redis по стандартному порту (по умолчанию 6379) вы можете использовать командуredis-cli без указания порта, так как redis-cli автоматически попытается подключиться к стандартному порту:

redis-cli

Если ваш сервер Redis настроен на прослушивание нестандартного порта, вы должны указать этот порт при подключении с помощью redis-cli, используя опцию -p:

redis-cli -p порт

Замените порт на номер порта, который вы используете. Например, если Redis работает на порту 6380, команда будет выглядеть так:

redis-cli -p 6380

Если вы хотите подключиться к Redis, работающему на другом сервере, вы также можете указать адрес сервера с помощью опции -h:

redis-cli -h хост -p порт

Замените хост на IP-адрес или доменное имя сервера Redis, а порт на номер порта, на котором работает Redis. Например:

redis-cli -h 192.168.1.10 -p 6380

Это подключит вас к Redis, работающему на IP-адресе 192.168.1.10 и порту 6380.

Краткое резюме

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

Какие команды позволяют выполнять транзакции в Redis?

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

  1. MULTI: Эта команда начинает транзакцию. После выполнения команды MULTI все последующие команды будут помещены в очередь и не будут выполнены немедленно.

  2. EXEC: Команда EXEC запускает выполнение всех команд, помещенных в очередь после выполнения команды MULTI. Если во время выполнения транзакции не возникает ошибок, все команды выполняются последовательно и атомарно.

  3. DISCARD: Отменяет транзакцию, удаляя все команды, которые были помещены в очередь после выполнения команды MULTI.

  4. WATCH: Команда WATCH позволяет "просматривать" ключи для обнаружения изменений, сделанных другими клиентами. Если между выполнением WATCH и EXEC другой клиент изменит любой из просматриваемых ключей, транзакция будет отменена.

  5. UNWATCH: Снимает все ключи, установленные для просмотра с помощью команды WATCH.

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

Команды по работе со строками в Redis

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

  1. SET: Устанавливает значение ключа. Если ключ уже содержит значение, оно будет перезаписано.
      SET key value
  1. GET: Получает значение ключа. Если ключ не существует, возвращает nil.
      GET key
  1. GETSET: Атомарно устанавливает значение ключа и возвращает предыдущее значение ключа.
      GETSET key value
  1. STRLEN: Получает длину значения, хранящегося в ключе.
      STRLEN key
  1. APPEND: Добавляет значение в конец существующего значения ключа. Если ключ не существует, он создается и выполняется как обычная команда SET.
      APPEND key value
  1. SETNX: Устанавливает значение ключа, только если ключ ещё не существует.
      SETNX key value
  1. SETEX: Устанавливает значение ключа и устанавливает время его жизни (TTL) в секундах.
      SETEX key seconds value
  1. PSETEX: То же, что и SETEX, но время жизни указывается в миллисекундах.
      PSETEX key milliseconds value
  1. MSET: Атомарно устанавливает несколько ключей в соответствующие значения.
      MSET key1 value1 key2 value2 ...
  1. MSETNX: Атомарно устанавливает несколько ключей в соответствующие значения, только если ни один из ключей не существует.
        MSETNX key1 value1 key2 value2 ...
  1. MGET: Получает значения нескольких ключей.
        MGET key1 key2 ...
  1. INCR: Увеличивает значение ключа на 1. Если ключ не существует, он создается с начальным значением 0, а затем увеличивается.
        INCR key
  1. DECR: Уменьшает значение ключа на 1. Если ключ не существует, он создается с начальным значением 0, а затем уменьшается.
        DECR key
  1. INCRBY: Увеличивает значение ключа на указанное число.
        INCRBY key increment
  1. DECRBY: Уменьшает значение ключа на указанное число.
        DECRBY key decrement
  1. INCRBYFLOAT: Увеличивает значение ключа на указанное число с плавающей точкой.
        INCRBYFLOAT key increment

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

Команды по работе со списками в Redis?

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

  1. LPUSH: Добавляет один или несколько элементов в начало списка.
      LPUSH list_name value1 [value2 ...]
  1. RPUSH: Добавляет один или несколько элементов в конец списка.
      RPUSH list_name value1 [value2 ...]
  1. LPOP: Удаляет и возвращает первый элемент из списка.
      LPOP list_name
  1. RPOP: Удаляет и возвращает последний элемент из списка.
      RPOP list_name
  1. LINDEX: Возвращает элемент по его индексу в списке.
      LINDEX list_name index
  1. LLEN: Возвращает длину списка.
      LLEN list_name
  1. LRANGE: Возвращает указанный диапазон элементов из списка.
      LRANGE list_name start stop
  1. LSET: Устанавливает значение элемента по его индексу.
      LSET list_name index value
  1. LTRIM: Обрезает список, чтобы оставить только элементы, указанные в диапазоне.
      LTRIM list_name start stop
  1. RPOPLPUSH: Удаляет последний элемент в списке и добавляет его в начало другого списка.
        RPOPLPUSH source_list_name destination_list_name
  1. BLPOP: Удаляет и возвращает первый элемент из списка или блокирует, пока не будет доступен элемент.
        BLPOP list_name1 [list_name2 ...] timeout
  1. BRPOP: Удаляет и возвращает последний элемент из списка или блокирует, пока не будет доступен элемент.
        BRPOP list_name1 [list_name2 ...] timeout
  1. BRPOPLPUSH: Удаляет последний элемент в одном списке, добавляет его в начало другого списка и возвращает его; блокирует, если необходимо.
        BRPOPLPUSH source_list_name destination_list_name timeout

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

Как посмотреть все данные в Redis?

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

Для получения списка всех ключей с помощью команды KEYS:

redis-cli KEYS '*'

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

Для итеративного просмотра ключей с помощью команды SCAN:

redis-cli SCAN 0

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

Для более подробного просмотра данных, связанных с каждым ключом, вам потребуется использовать соответствующие команды для получения данных, в зависимости от типа данных, связанных с ключом (например, GET для строк, HGETALL для хэшей, LRANGE для списков и т.д.).

Что такое TTL и какие команды кRedis и какие команды

TTL в Redis означает "Time to Live" (время жизни) и представляет собой механизм, который позволяет установить ограниченное время существования для ключа. По истечении этого времени ключ автоматически удаляется из базы данных. Это полезно для кэширования или других задач, где данные должны быть доступны только в течение определенного времени.

Вот некоторые команды, связанные с TTL в Redis:

  1. TTL: Возвращает оставшееся время жизни ключа в секундах.
      TTL key
  1. PTTL: Возвращает оставшееся время жизни ключа в миллисекундах.
      PTTL key
  1. EXPIRE: Устанавливает время жизни ключа в секундах.
      EXPIRE key seconds
  1. PEXPIRE: Устанавливает время жизни ключа в миллисекундах.
      PEXPIRE key milliseconds
  1. EXPIREAT: Устанавливает точное время истечения ключа в формате UNIX timestamp (в секундах).
      EXPIREAT key timestamp
  1. PEXPIREAT: Устанавливает точное время истечения ключа в формате UNIX timestamp (в миллисекундах).
      PEXPIREAT key milliseconds-timestamp
  1. PERSIST: Удаляет время жизни ключа, делая его постоянным (ключ не будет удален автоматически).
      PERSIST key

8.SETEX: Устанавливает значение ключа и время жизни в секундах атомарно.

      SETEX key seconds value
  1. PSETEX: Устанавливает значение ключа и время жизни в миллисекундах атомарно.
      PSETEX key milliseconds value

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