No mundo Python, muitos desenvolvedores adoram o banco de dados NoSQL Redis devido à sua velocidade e à disponibilidade de uma variedade de bibliotecas de clientes. No mundo do WordPress, o Redis costuma ser a tecnologia de escolha quando é necessário um cache de objeto persistente para acelerar o acesso aos dados de backend.

Você pode unir esses dois mundos ao manipular o conteúdo do WordPress com um aplicativo Python.

Neste tutorial, demonstramos como publicar conteúdo diretamente no Redis, criando um aplicativo Python que usa a popular biblioteca redis-py e como publicar por meio da API REST do WordPress.

O que é Redis?

O Redis, ou Remote Dictionary Server, é um banco de dados NoSQL rápido e um cache na memória desenvolvido por Salvatore Sanfilippo e mantido pela Redis Ltd. (anteriormente denominada Redi Labs). As versões de código aberto do Redis estão disponíveis sob a licença BSD (Berkeley Source Distribution), enquanto a Redis Ltd. enquanto a Redis Ltd. também oferece versões comerciais empresariais e em nuvem do servidor.

O Redis se distingue de outros bancos de dados NoSQL por seu mecanismo de armazenamento de dados. Normalmente, ele é chamado de armazenamento de estrutura de dados porque armazena dados com os mesmos tipos de dados encontrados em muitas linguagens de programação, incluindo strings, conjuntos, listas e dicionários (ou hashes). O Redis não apenas suporta estruturas de dados simples, mas também avançadas, incluindo funcionalidades para geolocalização e processamento de fluxos.

Pré-requisitos do aplicativo Python

Antes de começar a criar seu aplicativo, você precisa instalar localmente os três itens a seguir:

Dica profissional: você pode criar facilmente esse ambiente de desenvolvimento no Docker instalando o pacote DevKinsta pronto para WordPress da Kinsta.

Com os pré-requisitos já instalados, chegou o momento de fazer tudo funcionar em conjunto. Você criará um aplicativo em Python especificamente para capturar um artigo WordPress fornecido pelo usuário em formato de dicionário e armazená-lo em um cache Redis.

Criando um aplicativo Python para armazenar um artigo no cache Redis

O cache Redis é um mecanismo de cache eficiente para sites. Ele armazena informações solicitadas com frequência para um acesso mais rápido e conveniente. O cache armazena informações em uma estrutura de dados de valor-chave.

Comece criando uma nova pasta para o seu projeto chamada python-redis. Depois disso, inicie o terminal de comando, acesse cd para python-redis e instale o redis-py executando o seguinte comando:

pip install redis

Quando a instalação estiver concluída, crie um novo arquivo chamado main.py no diretório python-redis. Abra o arquivo em seu editor de texto favorito para inserir os blocos de código abaixo.

Comece importando a biblioteca redis-py recém-instalada e defina o endereço do host e da porta do Redis:

import redis
redis_host = 'localhost'
redis_port = 6379

Agora, defina os valores para o artigo WordPress como pares de chave/valor em um dicionário. Aqui está um exemplo:

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',    
}

Observação: em um aplicativo do mundo real, o conteúdo do artigo provavelmente viria de um formulário de entrada HTML.

Para tornar o texto mais legível e fluído, considerando as diretrizes fornecidas, segue a versão revisada:

Adicione ao código uma função redis_dict() que realizará a conexão com o seu servidor Redis local. Esta função será responsável por armazenar o artigo no cache do Redis e exibir no console os valores armazenados com sucesso.

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 você tenha iniciado o Redis no Docker, invoque a interface de linha de comando do Redis com o seguinte comando:

redis-cli

Agora, execute seu script Python:

python main.py

Ao executar o script, você adiciona o artigo ao armazenamento de valores-chave do Redis. Você deverá ver a seguinte resposta no console do seu terminal:

Saída do console mostrando o artigo do aplicativo Python adicionado ao armazenamento do Redis.
Saída do console mostrando o artigo do aplicativo Python adicionado ao armazenamento do Redis.

Você armazenou com êxito um artigo no banco de dados local do Redis.

Agora, vamos fazer upload do seu site artigo WordPress usando a API REST do WordPress, armazenando no banco de dados padrão MariaDB ou MySQL em vez do Redis.

Faça o upload de um artigo WordPress usando a API REST

A API REST do WordPress fornece um conjunto de endpoints que você pode chamar do seu aplicativo para interagir com o WordPress. Usamos o endpoint post para criar um artigo no WordPress.

Etapa 1: Defina a senha do aplicativo no WordPress

A API do WordPress requer uma senha de aplicativo para permitir que seu aplicativo acesse dados do site do WordPress. A senha é uma chave secreta de 24 caracteres, que você deve incluir em cada solicitação à API REST.

Gere uma senha de aplicativo na página User Profile no Painel do WordPress. Você pode atribuir um nome amigável a cada senha de aplicativo, mas não poderá visualizar a própria senha depois de gerá-la (portanto, faça uma cópia agora):

Gerando uma senha de aplicativo no Painel do WordPress.
Gerando uma senha de aplicativo no Painel do WordPress.

Etapa 2: Publique no WordPress com seu aplicativo Python

Primeiro, instale a biblioteca requests do Python para fazer a solicitação HTTP à API do WordPress. Para fazer isso, execute o seguinte comando no terminal:

pip install requests

Em seguida, dentro da pasta python-redis, crie um novo arquivo chamado app.py. Em seguida, abra o arquivo com seu editor de texto.

Comece importando os módulos requests, json e base64:

import requests
import json
import base64

Defina a URL de base da API, bem como seu nome de usuário e senha do WordPress. Para a variável de senha, use a senha do aplicativo que você gerou no WordPress:

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

Agora, junte user e password, codifique o resultado e passe para os cabeçalhos da solicitação:

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

E aqui está o corpo do artigo:

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',    
}

Configure a solicitação POST para a API e um comando para imprimir o status da resposta:

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

Execute seu script com o seguinte comando no terminal:

python app.py

Se você recebeu uma resposta 201 (“Created”), isso significa que o recurso foi adicionado com sucesso.

Um código de resposta 201 é retornado quando um artigo é postado com sucesso.
Um código de resposta 201 é retornado quando um artigo é postado com sucesso.

Você pode confirmar isso no painel do WordPress ou no banco de dados MySQL/MariaDB do seu site.

Use o cache do Redis diretamente no WordPress

Os sites WordPress podem usar o cache do Redis para armazenar temporariamente objetos, como artigos, páginas ou usuários. O objeto pode então ser acessado a partir do cache quando necessário. Essa abordagem economiza um tempo valioso, reduz a latência e melhora a capacidade do site de se expandir e lidar com mais tráfego.

Redis para clientes Kinsta

Um carregamento rápido é essencial para garantir que os usuários tenham uma experiência agradável ao navegar. Não há margem para desempenho abaixo do esperado. Pensando nisso, a Kinsta oferece o Redis como um serviço adicional de alta qualidade.

Para clientes que gostariam de aproveitar as vantagens do complemento Redis, basta entrar em contato com o suporte da Kinsta e cuidaremos do processo de instalação e configuração para você.

Instalando um plugin do Redis

Se você não for um cliente Kinsta, precisará instalar um plugin dedicado em seu site WordPress.

Por exemplo, vamos instalar o plugin Redis Object Cache em seu site local do WordPress.

O plugin Redis Object Cache.
O plugin Redis Object Cache.

Abra o arquivo wp-config.php em um editor de texto e adicione o seguinte código na seção de variáveis de configuração personalizadas:

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

Observação: O endereço do host do Redis dependerá da configuração do servidor que você tem.

Navegue até Settings > Redis no painel do WordPress. Você deverá ver algo semelhante a isto:

O plugin Redis Object Cache é exibido na aba de Settings.
O plugin Redis Object Cache é exibido na aba de Settings.

Agora, o cache do Redis substituiu com êxito o banco de dados MySQL anterior.

Além disso, o site frontend do WordPress usa o mesmo cache que o aplicativo backend Python. Você pode testar isso abrindo um novo terminal e executando o seguinte comando:

redis-cli monitor

À medida que você navegar pelo site, as solicitações do site serão enviadas para o prompt de comando:

Monitorando as solicitações do servidor no terminal com redis-cli.
Monitorando as solicitações do servidor no terminal com redis-cli.

Agora que o frontend e o backend estão sincronizados, você pode adicionar um novo artigo ao WordPress usando seu aplicativo Python por meio da API REST.

Para fazer isso, modifique o objeto POST em app.py para incluir seu novo artigo e, em seguida, execute python app.py para adicionar o artigo ao cache.

Resumo

Neste artigo, aprendemos como conectar um banco de dados Redis em um aplicativo Python usando o cliente Redis Python. Esse cliente oferece suporte a vários formatos para armazenamentos de dados do Redis: listas, conjuntos, dicionários e outros tipos de dados de comando.

Também vimos como você pode integrar o Redis em um site WordPress por meio da API REST e do plugin Redis Object Cache.

A capacidade de usar o cache de memória do Redis em seu site faz dele uma ferramenta de desenvolvimento potente e flexível. O Redis é extremamente eficaz para melhorar a velocidade de consulta ao banco de dados, o desempenho do site e a experiência geral do usuário.

Um bônus: Você pode deixar a Kinsta cuidar da instalação do Redis para o seu site WordPress. Além disso, os fãs de Redis ficarão felizes em saber que seu servidor favorito está disponível como uma implementação independente no serviço de Hospedagem Gerenciada de Banco de Dados da 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.