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

Распределенная блокировка 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

Как использовать RDB (файл резервной копии Redis)

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

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

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

 

Резервное копирование данных

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

Чтобы использовать команду SAVE, введите SAVE в интерфейсе командной строки Redis.

192.168.100.78:6379> SAVE

OK

 

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

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

192.168.100.78:6379> SAVE 1

(error) ERR wrong number of arguments for 'save' command

 

После успешного выполнения команды SAVE Redis создаст файл dump.rdb в каталоге Redis.

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

Чтобы решить эту проблему, вы можете использовать команду BGSAVE. Она работает аналогично команде SAVE, но использует дочерний процесс в фоновом режиме.

Например:

192.168.100.78:6379> BGSAVE

Background saving started

 

Восстановление данных

Резервные копии бесполезны, если мы не можем их использовать. Давайте обсудим, как вы можете использовать файл dump.rdb для восстановления ваших наборов данных.

Для начала отметьте расположение файла резервной копии dump.rbd.

Затем остановите сервер Redis:

sudo service redis-server stop

 

Переместите файл резервной копии dump.rdp в корень сервера Redis.

sudo mv ~/dump.rdb /var/lib/redis/

 

Теперь у вас должны быть данные из dump.rdb, загруженные в Redis.

 

Вывод

В этой статье мы научились выполнять резервное копирование и восстановление в Redis с помощью файла дампа RDB.



2021-12-17T10:22:51
Redis