Introducción a Redis y PHP para almacenamiento rápido de datos

El popular motor de almacenamiento Redis es una herramienta excelente e imprescindible en el arsenal de cualquier desarrollador de software. El motor de almacenamiento en memoria permite un almacenamiento y recuperación de datos increíblemente rápidos, hasta la impresionante cantidad de 32 millones de consultas por segundo, lo que lo convierte en un complemento principal para cualquier motor de base de datos importante.

Profundicemos y aprendamos cómo acelerar nuestras operaciones en línea.

Redis: pros y contras

El mayor beneficio de Redis es que es un almacén de datos puramente en memoria , lo que significa que es increíblemente rápido ya que la base de datos se almacena en la RAM, por lo que no se requieren operaciones de E / S de archivos en el disco duro.

Otros beneficios adicionales son su simplicidad, soporte de agrupamiento a través de Redis-cluster, además de su soporte para ocho tipos de datos diferentes que le brindan la flexibilidad necesaria para almacenar y administrar sus datos según sea necesario.

Sin embargo, su mayor caída es también el hecho de que es puramente un almacén de datos en memoria, por lo que tiene limitaciones de tamaño. Depende de la infraestructura de su servidor, pero por el bien de este artículo y la simplicidad, su base de datos típica de Redis solo tendrá un máximo de 2-4 GB de datos.

Esto significa que Redis se utiliza para complementar los motores de base de datos de uso popular como mySQL, PostgreSQL y MongoDB, y no pretende ser un reemplazo. Los usos principales de Redis incluyen un caché, datos temporales / recientes que caducarán en un corto período de tiempo o pequeños datos a los que se accede con frecuencia.

Cómo instalar Redis

Suponiendo que está ejecutando Ubuntu o cualquier distribución de Linux que contenga el comando apt-get , para instalar Redis simplemente ejecute el siguiente comando en la terminal:

 sudo apt-get install redis-server

A continuación, verifique que Redis se haya instalado correctamente. Dentro de la terminal, ejecute el comando:

 redis-cli --version

Esto debería imprimir la versión de Redis que está ejecutando y, asumiendo que sea así, ejecute el siguiente comando para conectarse a Redis:

 redis-cli

Esto le dará un mensaje de Redis no estándar dentro de la terminal, que se parece a lo siguiente:

 127.0.0.1:6379>

Comandos de cadena

Cada entrada en Redis se identifica mediante una clave, que puede ser cualquier cadena que no sea un espacio en blanco que desee. Las cadenas solo contienen un valor único y, por ejemplo, ejecute los siguientes comandos en el indicador de Redis para establecer un valor en un par de claves.

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

Ahora puede enumerar todas las claves actualmente dentro de la base de datos de Redis con el comando keys.

 127.0.0.1:6379> keys *

Esto dará como resultado que se muestren las dos claves que configuró anteriormente, full_name y unidades . Puede ver el valor de estas claves con el comando get.

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

La eliminación de claves se puede hacer fácilmente con el comando del.

 127.0.0.1:6379> del full_name

También es posible incrementar rápidamente un número entero con el comando hincrby . Lo siguiente incrementará la tecla "unidades" de 5 a 7.

 127.0.0.1:6379> incrby units 2

Comandos de lista

Las listas en Redis son matrices unidimensionales con un orden específico y permiten elementos duplicados en diferentes posiciones de la lista. Los elementos se pueden agregar a la izquierda o derecha de una lista con los comandos lpush y rpush .

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

Como puede ver en el ejemplo anterior, puede enviar varios elementos a una lista con un solo comando. Ahora podemos ver todos los elementos de la lista usando el comando lrange .

 127.0.0.1:6379> lrange colors 0 -1

Hay dos números enteros al final del comando, el primero que define la posición dentro de la lista en la que comenzar, y el segundo es el número de elementos a devolver con -1 que significa todos los elementos. El resultado del comando anterior será azul, rojo, amarillo, verde .

También puede eliminar elementos de cualquier extremo de una lista utilizando los comandos lpop y rpop .

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

También puede obtener el número de elementos en una lista con el comando llen .

 127.0.0.1:6379> llen colors
(integer) 2

Por último, puede eliminar un elemento de una lista mediante el comando lrem .

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

El comando lrem comienza con el nombre de la lista, seguido del número de apariciones a eliminar y el nombre del elemento a eliminar. Devolverá el número de ocurrencias encontradas y eliminadas de la lista.

Comandos hash

Uno de los tipos de datos más populares en Redis son los hash, que le permiten almacenar múltiples pares clave-valor dentro de una sola entrada. No es necesario que la clave exista ya, y usted define pares clave-valor en cualquier momento con el comando hset .

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

También puede definir varios pares clave-valor de un hash dentro de un solo comando usando el comando hmset .

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

El hash identificado por el usuario clave : 581 ahora tienen un total de cuatro pares clave-valor, todos los cuales se pueden recuperar fácilmente con el comando 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"

También puede obtener el valor de un solo par clave-valor dentro de un hash mediante el comando get .

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

Para cualquier número entero dentro del hash, puede incrementarlo en una cantidad específica con el comando de código hincrby .

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

El valor de la clave de puntos dentro del hash ahora se ha incrementado de 20 a 520. Un solo par clave-valor dentro de un hash se puede eliminar con el comando hdel .

 127.0.0.1:6379> hdel user:581 gender

Alternativamente, también puede eliminar un hash por completo, incluidos todos los pares clave-valor, utilizando el comando del .

 127.0.0.1:6379> del user:581

Caducar las claves de Redis

Otra característica excelente de Redis es la capacidad de expirar automáticamente las claves después de un número definido de segundos usando el comando expirar . Tenga en cuenta que solo puede vencer las claves completas y no los elementos singulares dentro de una lista o hash. Por ejemplo:

 127.0.0.1:6379> expire full_name 10

Esto establecerá un tiempo de expiración de 10 segundos en la clave full_name que creó en la sección de cadenas. Después de ejecutar el comando anterior, espere 10 segundos y luego intente recuperar el valor de la clave nuevamente.

 127.0.0.1:6379> get full_name
(nil)

Como se esperaba, la clave ahora ha expirado, por lo que obtenemos un valor nulo como resultado.

Conéctese a Redis con PHP

Ahora que ha aprendido los conceptos básicos de cómo almacenar y recuperar datos con Redis, es hora de conectarlos a su software. Todos los lenguajes de programación tienen módulos / extensiones para Redis, pero para este ejemplo, usaremos PHP.

Primero debe instalar la extensión PHP-Redis ya que no está instalada por defecto. Dentro de la terminal, ejecute el comando.

 sudo apt-get install php-redis

Una vez instalado, asegúrese de reiniciar PHP-fpm para que la extensión se cargue correctamente. Aquí hay un código PHP que se conecta e interactúa con 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);

El código de ejemplo anterior debería ser bastante sencillo. Primero se conecta a Redis con un tiempo de espera de 5 segundos, luego procede a configurar y obtener una cadena y un hash. Todos los comandos de Redis se pueden ejecutar a través de OOP llamándolos directamente desde el objeto de Redis como se muestra arriba.

¡Estás en camino!

Felicitaciones, ha aprendido los conceptos básicos de cómo almacenar y recuperar datos a una velocidad increíble a través del motor de almacenamiento de Redis, incluido cómo conectarse e interactuar con Redis usando PHP.

Tenga en cuenta que este artículo solo cubre los conceptos básicos, y la página Tipos de datos de Redis de la documentación es un excelente lugar para continuar explorando Redis y todas sus funciones.