En el mundo de Python, muchos desarrolladores adoran la base de datos Redis NoSQL por su velocidad y la disponibilidad de una potente variedad de bibliotecas cliente. En el mundo de WordPress, Redis es a menudo la tecnología a la que se recurre cuando se necesita una caché de objetos persistente para acelerar el acceso a los datos del backend.

Puedes unir estos dos mundos cuando manipules ese contenido de WordPress con una aplicación Python.

En este tutorial, demostramos cómo publicar contenido directamente en Redis construyendo una aplicación Python que utiliza la popular biblioteca redis-py y cómo publicar a través de la API REST de WordPress.

¿Qué es Redis?

Redis, o Servidor de Diccionario Remoto (Remote Dictionary Server), es una rápida base de datos NoSQL y una caché en memoria desarrollada por Salvatore Sanfilippo y mantenida por Redis Ltd. (anteriormente Redi Labs). Las versiones de código abierto de Redis están disponibles bajo licencia Berkeley Source Distribution (BSD), mientras que Redis Ltd. también ofrece versiones comerciales empresariales y en la nube del servidor.

Redis se distingue de otras bases de datos NoSQL por su mecanismo de almacenamiento de datos. Suele denominarse almacén de estructuras de datos porque almacena datos con los mismos tipos de datos que se encuentran en muchos lenguajes de programación, como cadenas, conjuntos, listas y diccionarios (o hashes). Además de soportar estructuras simples, Redis soporta estructuras de datos avanzadas para tareas como la geolocalización y el procesamiento de flujos.

Requisitos previos de la aplicación Python

Antes de empezar a crear tu aplicación, tienes que instalar localmente los siguientes tres elementos:

Consejo profesional: Puedes crear fácilmente este entorno de desarrollo dentro de Docker instalando el paquete DevKinsta de Kinsta preparado para WordPress.

Con los requisitos previos instalados, es el momento de hacer que funcionen correctamente juntos. En concreto, estás creando una aplicación Python que toma una entrada de WordPress de un usuario en formato diccionario y la guarda en una caché Redis.

Crear una app Python para almacenar una entrada en la caché de Redis

La caché Redis es un eficiente mecanismo de almacenamiento en caché para sitios web. Almacena información solicitada con frecuencia para un acceso más rápido y cómodo. La caché almacena la información en una estructura de datos clave-valor.

Comienza creando una nueva carpeta para tu proyecto llamada python-redis. Después, inicia tu terminal de comandos, cd a python-redis, e instala redis-py ejecutando el siguiente comando:

pip install redis

Cuando finalice la instalación, crea un nuevo archivo llamado main.py en el directorio python-redis. Abre el archivo en tu editor de texto favorito para introducir los bloques de código que aparecen a continuación.

Empieza importando la biblioteca redis-py recién instalada y establece la dirección del host y del puerto de Redis:

import redis
redis_host = 'localhost'
redis_port = 6379

Ahora, define los valores de la entrada de WordPress como pares clave/valor en un diccionario. Aquí tienes un ejemplo:

post = {
    'ID': 1,
    'post_author': 1,
    'post_date': '2024-02-05 00:00:00',
    'post_date_gmt': '2024-02-05 00:00:00',
    'post_content': 'Test Post <br/><a href="http://www.my-site.com/">related blog post</a>',
    'post_title': 'My first post',
    'post_excerpt': 'In this post, I will...',
    'post_status': 'publish',
    'comment_status': 'open',
    'ping_status': 'open',
    'post_password': 'my-post-pwd',
    'post_name': 'my-first-post',    
}

Nota: En una aplicación del mundo real, el contenido de la entrada probablemente procedería de un formulario de entrada HTML.

Añade al código una función redis_dict() que conectará con tu servidor Redis local, almacenará la entrada anterior en la caché de Redis e imprimirá en la consola los valores creados correctamente:

def redis_dict():
    try:
        r = redis.StrictRedis(host = redis_host, port = redis_port, decode_responses=True)
        r.hset("newPostOne", mapping=post)
        msg = r.hgetall("newPostOne")
        print(msg)
    except Exception as e:
        print(f"Something went wrong {e}")

# Runs the function:
if __name__ == "__main__":
    redis_dict()

A menos que hayas lanzado Redis dentro de Docker, invoca la interfaz de línea de comandos de Redis con el siguiente comando:

redis-cli

Ahora ejecuta tu script de Python:

python main.py

La ejecución del script añade la entrada al almacén de valores clave Redis. Deberías ver la siguiente respuesta en la consola de tu terminal:

Captura de pantalla del terminal mostrando los datos enviados a través de Python a una base de datos Redis.
Salida de la consola mostrando la entrada de la aplicación Python añadida al almacenamiento Redis.

Has almacenado correctamente una entrada en tu base de datos local Redis.

Ahora, vamos a subir esta entrada a tu sitio de WordPress utilizando la API REST de WordPress, almacenándola en la base de datos MariaDB o MySQL por defecto en lugar de Redis.

Subir una entrada a WordPress utilizando la API REST

La API REST de WordPress proporciona un conjunto de endpoints a los que puedes llamar desde tu aplicación para interactuar con WordPress. Nosotros utilizamos el endpoint post para crear una entrada en WordPress.

Paso 1: Establecer la contraseña de la aplicación en WordPress

La API de WordPress requiere una contraseña de aplicación para permitir que tu aplicación acceda a los datos del sitio de WordPress. La contraseña es una clave secreta de 24 caracteres, que debes incluir en cada petición a la API REST.

Genera una contraseña de aplicación en la página Perfil de Usuario del Panel de control de WordPress. Puedes asignar un nombre fácil de usar a cada contraseña de aplicación, pero no podrás ver la propia contraseña después de generarla (así que haz una copia ahora):

Captura de pantalla que muestra la interfaz para generar una contraseña de API en WordPress.
Generar una contraseña de aplicación en el Panel de control de WordPress.

Paso 2: Publicar en WordPress con tu aplicación Python

En primer lugar, instala la librería de requests de Python para realizar la petición HTTP a la API de WordPress. Para ello, ejecuta el siguiente comando en el terminal:

pip install requests

A continuación, dentro de tu carpeta python-redis, crea un nuevo archivo llamado app.py. A continuación, abre el archivo con tu editor de texto.

Comienza importando los módulos requests, json y base64:

import requests
import json
import base64

Define la URL base de la API, así como tu nombre de usuario y contraseña de WordPress. Para la variable contraseña, utiliza la contraseña de la aplicación que generaste en WordPress:

url = 'http://localhost/wp-json/wp/v2'
user = '<Your username here>'
password = '<Your application password here>'

Ahora, une user y password, codifica el resultado y pásalo a las cabeceras de la solicitud:

creds = user + ":" + password
token = base64.b64encode(creds.encode())
header = {'Authorization': 'Basic ' + token.decode('utf-8')}

Y aquí tienes el cuerpo del mensaje:

post = {    
    'author': 1,
    'date': '2024-02-05 00:00:00',
    'date_gmt': '2024-02-05 00:00:00',
    'content': 'Test Post <br/><a href="http://www.my-site.com/">related blog post</a>',
    'title': 'My second post',
    'excerpt': 'In this post, I will...',
    'status': 'publish',
    'comment_status': 'open',
    'ping_status': 'open',
    'password': 'my-post-pwd',
    'slug': 'my-second-post',    
}

Configura la solicitud POST a la API y un comando para imprimir el estado de la respuesta:

r = requests.post(url + '/posts', headers=header, json=post)
print(r)

Ejecuta tu script con el siguiente comando en el terminal:

python app.py

Si recibes una respuesta 201 («Creado»), significa que el recurso se ha añadido correctamente.

Captura de pantalla del terminal informando de un código de respuesta 201 tras publicar en WordPress a través de Python.
Se devuelve un código de respuesta 201 en una publicación correcta.

Puedes confirmarlo en tu panel de WordPress o en la base de datos MySQL/MariaDB de tu sitio.

Utilizar la caché Redis directamente en WordPress

Los sitios web de WordPress pueden utilizar la caché de Redis para almacenar temporalmente objetos, como entradas, páginas o usuarios. A continuación, se puede acceder al objeto desde la caché cuando sea necesario. Este enfoque ahorra un tiempo valioso, reduce la latencia y mejora la capacidad del sitio para escalar y hacer frente a más tráfico.

Redis para clientes de Kinsta

Un tiempo de carga rápido es vital para una experiencia de usuario agradable, y hay poco margen para un rendimiento inferior. Por eso Kinsta ofrece Redis como add-on premium.

Para los clientes que deseen beneficiarse del add-on Redis, sólo tienen que ponerse en contacto con el soporte de Kinsta, y nosotros nos encargaremos del proceso de instalación y configuración.

Instalar un plugin Redis

Si no eres cliente de Kinsta, tendrás que instalar un plugin dedicado en tu sitio de WordPress.

Por ejemplo, vamos a instalar el plugin Redis Object Cache en tu sitio web local de WordPress.

Captura de pantalla: Selección del plugin Redis Object Cache para su instalación en WordPress.
El plugin Redis Object Cache.

Abre el archivo wp-config.php en un editor de texto y añade el siguiente código en la sección de variables de configuración personalizadas:

define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_HOST', 'localhost');
define('WP_REDIS_PORT', '6379');

Nota: La dirección de tu host Redis dependerá de la configuración de tu servidor.

Ve a Configuración > Redis en el panel de control de WordPress. Deberías ver algo similar a esto:

Captura de pantalla: Página de configuración del plugin de caché de objetos Redis en WordPress.
El plugin Redis Object Cache aparece en la pestaña Configuración.

La caché Redis ha sustituido con éxito a la anterior base de datos MySQL.

Además, el frontend del sitio WordPress utiliza la misma caché que el backend de la aplicación Python. Puedes comprobarlo abriendo un nuevo terminal y ejecutando el siguiente comando:

redis-cli monitor

Mientras navegas por tu sitio, las peticiones del sitio web se mostrarán en el símbolo del sistema:

Captura de pantalla que muestra las peticiones al servidor Redis dentro del terminal.
Monitorizando las peticiones del servidor en el terminal con redis-cli.

Ahora que el frontend y el backend están sincronizados, puedes añadir una nueva entrada a WordPress utilizando tu aplicación Python a través de la API REST.

Para ello, modifica el objeto POST en app.py para incluir tu nueva entrada y, a continuación, ejecuta python app.py para añadir la entrada a la caché.

Resumen

En este artículo hemos aprendido a conectar una base de datos Redis a una aplicación Python utilizando el cliente Redis Python. Este cliente admite varios formatos para los almacenes de datos Redis: listas, conjuntos, diccionarios y otros tipos de datos de comandos.

También hemos visto cómo integrar Redis en un sitio de WordPress mediante la API REST y el plugin Redis Object Cache.

La posibilidad de utilizar la caché en memoria de Redis para tu sitio lo convierte en una herramienta de desarrollo potente y flexible. Redis es extraordinariamente eficaz para mejorar la velocidad de consulta de tu base de datos, el rendimiento del sitio y la experiencia general del usuario.

Un bonus: puedes hacer que Kinsta se encargue de la instalación de Redis para tu sitio de WordPress. Además, los fans de Redis encontrarán su servidor favorito disponible como implementación independiente en el servicio de Alojamiento Administrado de Bases de Datos de Kinsta.

Steve Bonisteel Kinsta

Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.