Учебник по Redis: введение в технологию баз данных

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

Шаг 1: установка Redis

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

Обратите внимание на .

Ниже мы опишем, как установить и настроить Redis на Ubuntu. Однако его также можно использовать на Mac и Windows. Если вы хотите попробовать Redis, не устанавливая его на свой компьютер, мы рекомендуем онлайн-среду тестирования Try Redis.

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

sudo apt-get update
sudo apt-get install redis-server

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

redis-server

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

redis-cli

Интерфейс покажет IP-адрес и порт, на котором работает Redis. Теперь вы можете выполнить ping.

127.0.0.1:6397> ping
PONG

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

127.0.0.1:6397> set test "OK!"
127.0.0.1:6397> get test
"OK!"
Примечание

Вы хотите установить Redis на свой собственный сервер? Облачные серверы IONOS можно масштабировать для небольших проектов.

Шаг 2: настройка Redis

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

127.0.0.1:6397> config get *

В списке всех параметров конфигурации пары всегда перечислены друг за другом. Соответственно, значение «dump.rdb» соответствует параметру «dbfilename». Звездочка, используемая для получения списка, является лишь обозначением конкретного параметра конфигурации. Если вы хотите проверить только конкретный параметр, вы можете заменить звездочку на название параметра. Это всегда верхняя часть конфигурационной пары — ключ для соответствующего значения.

127.0.0.1:6397> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

Чтобы изменить запись в конфигурационном файле, используется команда set. Например, с ее помощью можно задать пароль.

127.0.0.1:6397> config set requirepass "password"
OK

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

127.0.0.1:6397> auth "password"
127.0.0.1:6397> config get requirepass
1) "requirepass"
2) "password"
Примечание

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

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

127.0.0.1:6397> save

Используя команду save, вы можете вручную создать снимок. Однако эти резервные копии можно также автоматизировать.

127.0.0.1:6397> save 60 10

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

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

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

127.0.0.1:6397> config set appendonly yes
Совет

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

Шаг 3: создание записей

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

Строки

Строки проще всего задать. Для этого просто используйте команду set.

Примечание

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

127.0.0.1:6397> set foo "bar"
127.0.0.1:6397> set value 1

Теперь, если запросить записи для foo и value командой get, будут выведены соответствующие значения.

127.0.0.1:6397> get foo
"bar"
127.0.0.1:6397> get value
"1"

Чтобы удалить запись, используйте команду del.

127.0.0.1:6397> del foo
(integer) 1
127.0.0.1:6397> get foo
(nil)

Если вы не хотите использовать дополнительную строку кода для создания нескольких записей, вы можете воспользоваться расширенной функцией mset. Вы также можете получить значения сразу нескольких записей с помощью команды mget.

127.0.0.1:6397> mset foo1 "bar1" foo2 "bar2" foo3 "bar3"
OK
127.0.0.1:6397> mget foo1 foo2 foo3
1) "bar1"
2) "bar2"
3) "bar3"

Списки

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

127.0.0.1:6397> lpush mylist foo
(integer) 1
127.0.0.1:6397> lpush mylist bar
(integer) 2
127.0.0.1:6397> lrange mylist 0 10
1) "foo"
2) "bar"
127.0.0.1:6397> linsert mylist before "bar" "test"
(integer) 3
127.0.0.1:6397> lrange mylist 0 10
1) "foo"
2) "test"
3) "bar"
127.0.0.1:6397> lrem mylist 0 foo
(integer) 1
127.0.0.1:6397> lrange mylist 0 10
1) "test"
2) "bar"

В этом примере Redis мы сначала добавили два элемента в список (lpush) и отобразили их. С помощью команды lrange можно задать диапазон, который будет отображаться (здесь от 0 до 10). В диапазоне можно также использовать отрицательные числа. Затем мы добавили еще одно значение перед существующим с помощью команды linsert (также можно вставить его после) и таким образом изменили нумерацию. Вы можете использовать команду lrem для удаления определенных записей из списка.

Наборы

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

127.0.0.1:6397> sadd myset "foo"
(integer) 1
127.0.0.1:6397> sadd myset "bar"
(integer) 1
127.0.0.1:6397> smembers myset
1) "bar"
2) "foo"
127.0.0.1:6397> sismember myset "bar"
(integer) 1
127.0.0.1:6397> srem myset "bar"
(integer) 1
127.0.0.1:6397> smembers myset
1) "foo"

Используя sadd, вы можете добавить несколько элементов в набор одновременно, добавляя их один за другим в команду. Чтобы отобразить набор, все, что вам нужно, это команда smembers и имя нужного набора. Используя команду sismember, вы также можете искать определенную запись. Аналогично списку, вы можете удалять отдельные записи с помощью команды srem.

Redis также позволяет пользователям использовать наборы в отсортированном формате.

127.0.0.1:6397> zadd mysortedset 1 "foo"
(integer) 1
127.0.0.1:6397> zadd mysortedset 2 "bar"
(integer) 1
127.0.0.1:6397> zadd mysortedset 2 "foobar"
(integer) 1
127.0.0.1:6397> zrange mysortedset 0 10
1) "foo"
2) "bar"
3) "foobar"

Чтобы добавить элементы в этот тип данных, используйте команду zadd и показатель. Хотя сами значения не могут встречаться более одного раза, вы можете ввести одно и то же число несколько раз для оценки. Таким образом, оценка — это не прямая нумерация в наборе, а ранжирование. Все элементы с оценкой 2 идут после элементов с оценкой 1. С помощью команды zrange можно вывести на экран все или некоторые элементы.

Хеши

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

127.0.0.1:6397> hset user1 name "bob" email "bob@example.com" password "rK87_x"
OK
127.0.0.1:6397> hget user1 name
1) "bob"
127.0.0.1:6397> hgetall user1
1) "name"
2) "bob"
3) "email"
4) "bob@example.com"
5) "password"
6) "rK87_x"
127.0.0.1:6397> hvals user1
1) "bob"
2) "bob@example.com"
3) "rK87_x"
127.0.0.1:6397> hkeys user1
1) "name"
2) "email"
3) "password"
> hdel user1 password
(integer) 1
127.0.0.1:6397> hgetall user1
1) "name"
2) "bob"
3) "email"
4) "bob@example.com"
127.0.0.1:6397> del user1
(integer) 1
127.0.0.1:6397> hgetall user1
(empty list or set)

В этом примере Redis мы использовали hset для создания хэша и назвали его user1. Хэш имеет три поля. Используя команду hget, вы можете запросить значение каждого поля по отдельности. Чтобы отобразить все поля одновременно, используйте hgetall. Дополнительные опции запроса включают hvals (отображение всех значений, хранящихся в хэше) и hkeys (отображение всех ключей, хранящихся в хэше). Вы можете удалить отдельные поля с помощью hdel. Чтобы удалить весь хэш, вы можете сделать это как обычно, используя del.

Примечание

Команда flushall удаляет все записи в базе данных.

Шаг 4: дополнительные опции

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

127.0.0.1:6397> set foo 1
OK
127.0.0.1:6397> get foo
"1"
127.0.0.1:6397> incr foo
(integer) 2
127.0.0.1:6397> incr foo
(integer) 3
127.0.0.1:6397> get foo
"3"
127.0.0.1:6397> decr foo
(integer) 2
127.0.0.1:6397> get foo
"2"

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

127.0.0.1:6397> set foo "bar"
OK
127.0.0.1:6397> expire foo 100
(integer) 1
127.0.0.1:6397> ttl foo
(integer) 50
127.0.0.1:6397> ttl foo
(integer) -50
127.0.0.1:6397> get foo
(nil)

Команда expire требует, чтобы период времени был в секундах. Так, в данном примере Redis мы установили время истечения срока действия в 100 секунд. На половине пути мы запросили время жизни (т.е. оставшееся время) с помощью команды ttl. Если вы будете ждать дольше этого времени, TTL перейдет в отрицательный диапазон. В этот момент запись перестанет существовать.

Используя команду setex, вы можете связать запись базы данных непосредственно с TTL при ее создании.

127.0.0.1:6397> setex foo 100 "bar"
OK

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

127.0.0.1:6397> set foo "Hello"
OK
127.0.0.1:6397> append foo " World"
(integer) 11
127.0.0.1:6397> get foo
"Hello World"
127.0.0.1:6397> set bar 5
OK
127.0.0.1:6397> append bar 10
(integer) 3
127.0.0.1:6397> get bar
"510"

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

Кроме того, записи можно переименовать с помощью команды rename.

127.0.0.1:6397> set foo 100
OK
127.0.0.1:6397> rename foo bar
OK
127.0.0.1:6397> get foo
(nil)
127.0.0.1:6397> get bar
"100"
Совет

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

Оцените статью
cdelat.ru
Добавить комментарий