Начало работы с Redis и PHP для быстрого хранения данных

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

Давайте углубимся и узнаем, как ускорить наши онлайн-операции.

Redis: плюсы и минусы

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

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

Однако его самым большим недостатком также является тот факт, что это чисто хранилище данных в памяти, поэтому оно имеет ограничения по размеру. Это зависит от инфраструктуры вашего сервера, но для простоты и простоты этой статьи ваша типичная база данных Redis будет содержать не более 2–4 ГБ данных.

Это означает, что Redis используется для дополнения широко используемых механизмов баз данных, таких как mySQL, PostgreSQL и MongoDB, и не предназначен для замены. Основное использование Redis включает кеширование, временные / недавние данные, срок действия которых истекает через короткий период времени, или небольшие фрагменты данных, к которым часто обращаются.

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

Предполагая, что вы используете Ubuntu или любой дистрибутив Linux, содержащий команду apt-get , для установки Redis просто выполните следующую команду в терминале:

 sudo apt-get install redis-server

Затем убедитесь, что Redis успешно установлен. В терминале запустите команду:

 redis-cli --version

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

 redis-cli

Это даст вам нестандартное приглашение Redis в терминале, которое выглядит примерно так:

 127.0.0.1:6379>

Строковые команды

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

 127.0.0.1:6379> set full_name "John Doe"
127.0.0.1:6379> set units 5

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

 127.0.0.1:6379> keys *

Это приведет к отображению двух ключей, которые вы установили ранее, full_name и units . Вы можете увидеть значение этих ключей с помощью команды get.

 127.0.0.1:6379> get full_name
"John Doe"
127.0.0.1:6379> get units
5

Удалить ключи легко с помощью команды del.

 127.0.0.1:6379> del full_name

Также можно быстро увеличить целое число с помощью команды hincrby . Следующее приведет к увеличению клавиши «единиц» с 5 до 7.

 127.0.0.1:6379> incrby units 2

Список команд

Списки в Redis представляют собой одномерные массивы с определенным порядком и позволяют дублировать элементы в разных позициях списка. Элементы можно добавлять слева или справа от списка с помощью команд lpush и rpush .

 127.0.0.1:6379> lpush colors blue
127.0.0.1:6379> rpush colors red yellow green

Как видно из приведенного выше примера, вы можете поместить несколько элементов в список с помощью одной команды. Теперь мы можем просмотреть все элементы в списке с помощью команды lrange .

 127.0.0.1:6379> lrange colors 0 -1

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

Вы также можете удалить элементы с любого конца списка с помощью команд lpop и rpop .

 127.0.0.1:6379> lpop colors
blue
127.0.0.1:6379> rpop colors
green

Вы также можете получить количество элементов в списке с помощью команды llen .

 127.0.0.1:6379> llen colors
(integer) 2

Наконец, вы можете удалить элемент из списка с помощью команды lrem .

 127.0.0.1:6379> lrem colors 1 green
(integer) 1

Команда lrem начинается с имени списка, за которым следует количество удаляемых вхождений и имя удаляемого элемента. Он вернет количество найденных и удаленных из списка вхождений.

Хеш-команды

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

 127.0.0.1:6379> hset user:581 full_name "Jane Doe"
127.0.0.1:6379> hset user:581 points 500

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

 127.0.0.1:6379> hmset user:581 email [email protected] gender F

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

 127.0.0.1:6379> hgetall user:581
1) "full_name"
2) "Jane Doe"
3) "points"
4) "500"
5) "email"
6) "[email protected]"
7) "gender"
8) "F"

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

 127.0.0.1:6379> hget user:581 email
"[email protected]"

Для любых целых чисел в хэше вы можете увеличить их на указанную величину с помощью команды code hincrby .

 127.0.0.1:6379> hincrby user:581 points 20
(integer) 520

Значение ключа точек в хеш-коде теперь увеличено на 20 до 520. Единственная пара "ключ-значение" в хэше может быть удалена с помощью команды hdel .

 127.0.0.1:6379> hdel user:581 gender

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

 127.0.0.1:6379> del user:581

Срок действия ключей Redis

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

 127.0.0.1:6379> expire full_name 10

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

 127.0.0.1:6379> get full_name
(nil)

Как и ожидалось, срок действия ключа истек, поэтому в результате мы получаем null.

Подключиться к Redis с помощью PHP

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

Сначала необходимо установить расширение PHP-Redis, так как по умолчанию оно не устанавливается. В терминале запустите команду.

 sudo apt-get install php-redis

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

 <?php
// Connect to redis
$conn = new redis();
try {
$conn->connect('127.0.0.1', 6379, 5);
} catch (RedisException $e) {
die("Unable to connect to redis");
}
// Set string
$conn->set('country', 'Canada');
// Get string
$value = $conn->get('country');
echo "Country is: $value
";
// Define a profile
$profile = [
'username' => 'mike',
'full_name' => 'Mike Smith',
'email' => '[email protected]',
'country' => 'Australia'
];
// Create a hash
$conn->hmset('user:188', $profile);
// Get all values of the profile hash
$values = $conn->hgetall('user:188');
print_r($values);
// Get only the e-mail address
$email = $conn->hget('user:188', 'email');
echo "E-mail is: $email
";
// Expire the hash in 15 seconds
$conn->expire('user:188', 15);

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

Вы в пути!

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

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