Архив метки: Redis

Запрос Redis из Python

Remote Dictionary Server, или для краткости Redis, — это бесплатная база данных в оперативной памяти с открытым исходным кодом. Redis — это однопоточная база данных NoSQL, созданная для обеспечения высокой производительности и малой задержки между чтением и записью данных. Он использует пары ключ-значение для хранения данных.

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

В этой статье мы познакомим вас с ключевыми концепциями Redis и покажем, как использовать Redis с языком программирования Python. Читать

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

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

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

 

Типы разделов Redis

В Redis есть два механизма разделения:

  1. Разделение диапазона
  2. Разбиение хэша

 

Разделение по рангу

Лучший способ объяснить разделение — использовать аналогию. Предположим, у вас есть четыре экземпляра Redis: R0, R1, R2 и R3. Кроме того, предположим, что вам нужно хранить ключи в формате user:[id].

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

При разбиении по диапазонам вы сопоставляете раздел своих данных с конкретным экземпляром. Например, вы можете взять ключи от пользователя: [id<0> – id<1000>] и сопоставить их с экземпляром R0. Экземпляр r1 может содержать подмножество ключей пользователя [id<1001> – id<2000>] и так далее.

Это самая простая и наиболее применимая форма разбиения в Redis. Тем не менее, это дает ограничение.

Для секционирования диапазона требуется таблица, которая сопоставляет определенный диапазон с соответствующим ему кластером.

Таблица сопоставления требует управления и применения для каждого секционированного типа данных.

 

Разбиение хэша

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

Например, если у нас есть ключ «fact», мы можем преобразовать его в число, используя функцию хэширования, такую ​​как CRC-16.

Это должно вернуть число как fact.

Затем Redis применяет к числу операцию по модулю и возвращает результат от 0 до 3.

Например:

8167 % 2

 

Приведенная выше операция должна вернуть 1. Затем Redis использует это значение, чтобы определить, в каком кластере должен храниться ключ. В нашем примере ключ «fact» хранится в экземпляре R1.

Примечание
В Redis операция хеширования выполняется иначе. Выше приведена просто аналогия.

 

Преимущества разделения.

  1. Разделение позволяет нескольким экземплярам совместно использовать память и хранить данные.
  2. Разрешить масштабирование вычислительной мощности.

 

 Недостатки разделения

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

 

Заключение

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



2022-04-06T16:26:31
Redis

LUA-скрипты Redis

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

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

 

Требования

Чтобы лучше следовать этой статьи, мы рекомендуем установить в вашей системе последнюю версию сервера Redis.

Базовые знания Redis полезны для понимания команд, показанных в этой статье.

 

Команда Redis EVAL

Чтобы запускать команды Lua в Redis, вам нужно использовать команду EVAL. Команда указывает Redis выполнять код как сценарий Lua на стороне сервера.

Пример показан ниже:

127.0.0.1:6379> EVAL "redis.call('SET', KEYS[1], ARGV[1])" 1 key value

 

В приведенном выше примере мы начинаем с команды EVAL, за которой следует сценарий Lua. Скрипт использует функцию redis.call. Затем мы передаем команду для запуска, ключ и значение в качестве аргументов. Это похоже на запуск значений ключа SET.

Обратите внимание, что KEYS и ARGV обозначают аргументы скрипта. В этом случае мы указываем количество ключей как 1.

Разбор аргументов выполняется через ARGV, который содержит таблицу аргументов. В нашем случае мы передаем значение ключа.

Затем мы можем получить доступ к ключам, начиная с индекса 1.

Примечание
Рекомендуется указывать все ключи, используемые в сценарии, в разделе KEYS, а все остальные аргументы — в разделе ARGV.

 

Мы можем получить значение ключа с помощью команды get:

127.0.0.1:6379> EVAL "redis.call('GET', KEYS[1])" 1 key

 

Это должно вернуть значение указанного ключа.

 

Команда Redis EVALSHA

Redis также предоставляет вам команду EVALSHA для вызова команды на основе ее хеш-значения.

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

Пример:

SCRIPT LOAD "return redis.call('get', KEYS[1])"

 

Приведенная выше команда должна возвращать значение SHA как:

"4e6d8fc8bb01276962cce5371fa795a7763657ae"

 

Затем вы можете использовать это значение sha для вызова команды.

127.0.0.1:6379> EVALSHA 4e6d8fc8bb01276962cce5371fa795a7763657ae 1 key

"value"

 

Чтобы удалить все загруженные скрипты, выполните команду:

127.0.0.1:6379> SCRIPT FLUSH

OK

 

Приведенная выше команда должна очистить кеш скрипта.

 

Заключение

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



2022-04-04T17:52:20
Redis

Как получить размер базы данных Redis

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

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

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

В этой статье мы узнаем, как определить размер базы данных в Redis.

 

Управление и переключение баз данных Redis

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

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

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

# redis-cli



127.0.0.1:6379>

 

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

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

127.0.0.1:6379> select 10



OK



127.0.0.1:6379[10]>

 

Обратите внимание, что номер вашей текущей выбранной базы данных указан в приглашении терминала. Это применимо только к базам данных выше индекса 0.

 

Массовая вставка данных Redis

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

cat ip_addresses.txt | redis-cli --pipe

 

Записи в файле имеют формат:

SET key "value"

Redis Получить размер базы данных

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

Например:

127.0.0.1:6379> dbsize



(integer) 103

 

Предыдущая команда возвращает количество ключей в базе данных с индексом 0.

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

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

127.0.0.1:6379> info keyspace



# Keyspace



db0:keys=103,expires=0,avg_ttl=0

 

Команда должна возвращать количество ключей, среднее время жизни и количество ключей с истекающим сроком действия.

 

Заключение

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



2022-04-01T15:53:22
Redis

Как включить сжатие с помощью Redis

Remote Dictionary Server, или сокращенно Redis, — это молниеносная база данных в памяти, которая хранит значения в парах ключ-значение. Она в основном используется в качестве механизма кэширования для таких баз данных, как базы данных SQL и документов.

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

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

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

 

Реализуйте алгоритм сжатия

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

К таким алгоритмам относятся:

  1. Сжатие LZO — очень быстрое и обеспечивает более высокую скорость декомпрессии.
  2. LZ4 — эффективен по скорости и очень легко интегрируется в приложения.
  3. Snappy — высокая скорость сжатия/распаковки.

 

Используйте более короткие имена ключей

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

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

Пример:

SET this_is_a_very_large_key_name value

 

Вместо этого вы можете использовать имя ключа:

SET l_key_name value

 

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

 

Сжать имена полей

То же самое можно сказать и об именах полей. И опять же, использование более короткого имени поля может сэкономить несколько байтов или килобайт вашей памяти.

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

Пример показан ниже:

127.0.0.1:6379> HSET user_info id 1 firstname Maki lastname K country "India"

 

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

HSET user_info id 1 fname Maki lname country In

 

Это сжимает имена полей и значения.

 

Используйте список вместо хеша

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

Чтобы решить эту проблему, вы можете выбрать список, как показано ниже:

HSET user_info id 1 fname Maki lname country In

 

Вы можете преобразовать приведенный выше хеш в список как:

LPUSH ["fname", "Maki", "lname", "K", "country", "In"]

Избегайте динамических скриптов Lua

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

 

Включить сжатие списка

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

В файле Redis.conf найдите строку:

sudo cat /etc/redis/redis.conf | grep list-compress

list-compress-depth 0 // change this value

 

Измените значение list-compress-depth на:

  1. 1 — сжимает все узлы списка, кроме головы и хвоста.
  2. 2 — никогда не сжимать голову или голову-> или хвост или хвост->пред.
  3. 3 – начать сжатие после head->next и tail->-prev

 

Обновите версию Redis

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

На момент написания этого руководства версия 4.0 (последняя) имела следующие функции.

  1. Он поддерживает смешанный формат RDB + AOF.
  2. Улучшение использования памяти и производительности.
  3. Введена новая команда памяти.
  4. Активная дефрагментация памяти.
  5. Более быстрое создание ключа кластера Redis.

 

Закрытие

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



2022-03-31T15:19:10
Redis

Как изменить порт по умолчанию для Redis

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

 

Базовый

После установки Redis на свой сервер вы можете запустить сервер с помощью команды redis-server. Команда инициализирует кластер Redis, позволяя вам подключаться к нему и выполнять команды.

По умолчанию сервер Redis будет работать на порту 6379. Вы можете изменить порт запуска по умолчанию, как описано в этой статье.

 

Метод 1 — аргументы командной строки.

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

Например, чтобы указать Redis запускаться на порту 9001, используйте флаг –port, как показано в примере команды:

redis-server --port 9001

 

Метод 2 — файл конфигурации

Мы запустили сервер Redis на настраиваемом порту, указав аргумент –port в обсуждаемом методе.

Этот метод потребует от вас указывать порт каждый раз при перезапуске сервера.

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

Откройте терминал и отредактируйте конфигурацию как:

sudo nano /etc/redis/redis.conf

 

Найдите запись, как показано ниже, и измените значение на желаемый порт.

port 6379

 

После того, как вы установите желаемый порт, сохраните и закройте файл.

Затем перезапустите службу Redis, чтобы изменения вступили в силу.

 

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

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

redis-cli -h localhost -p 9001

 

Вы можете узнать больше, проверив документацию по redis-cli.

 

Выводы

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



2021-12-20T18:36:28
Redis