In de wereld van Python zijn veel developers enthousiast over de NoSQL database Redis vanwege de snelheid en de beschikbaarheid van een robuust assortiment aan client libraries. In de WordPress wereld is Redis vaak de meest gebruikte technologie als er een persistent object cache nodig is om de toegang tot backend gegevens te versnellen.

En goed nieuws! Je kunt deze twee werelden namelijk samenbrengen wanneer je die WordPress content manipuleert met een Python applicatie.

In deze tutorial laten we zien hoe je content direct naar Redis kunt posten door een Python app te bouwen die de populaire redis-py bibliotheek gebruikt en hoe je kunt posten via de WordPress REST API.

Wat is Redis?

Redis, of Remote Dictionary Server, is een snelle NoSQL database en in-memory cache ontwikkeld door Salvatore Sanfilippo en onderhouden door Redis Ltd. (voorheen Redi Labs). De open-source versies van Redis zijn beschikbaar onder Berkeley Source Distribution (BSD) licenties, terwijl Redis Ltd. ook commerciële bedrijfs- en cloud-versies van de server aanbiedt.

Redis onderscheidt zich van andere NoSQL databases door het mechanisme voor gegevensopslag. Het wordt meestal een datastructuur opslag genoemd, omdat het gegevens opslaat met dezelfde datatypes als in veel programmeertalen, waaronder strings, sets, lijsten en woordenboeken (of hashes). Redis ondersteunt niet alleen eenvoudige structuren, maar ook geavanceerde gegevensstructuren voor taken als geolocatie en streamverwerking.

Python app vereisten

Voordat je begint met het maken van je app, moet je de volgende drie onderdelen lokaal installeren:

Pro tip: Je kunt deze ontwikkelomgeving eenvoudig binnen Docker maken door Kinsta’s WordPress-ready DevKinsta pakket te installeren.

Nu de randvoorwaarden zijn geïnstalleerd, is het tijd om alles samen te laten werken. Concreet maak je een Python app die de WordPress post van een gebruiker in woordenboekformaat opneemt en opslaat in een Redis cache.

Een Python app maken om een bericht op te slaan in de Redis cache

Redis cache is een efficiënt caching mechanisme voor websites. Het slaat vaak opgevraagde informatie op voor snellere, handigere toegang. De cache slaat informatie op in een key-value datastructuur.

Maak eerst een nieuwe map aan voor je project met de naam python-redis. Start daarna je commandoterminal op, cd naar python-redis en installeer redis-py door het volgende commando uit te voeren:

pip install redis

Wanneer de installatie is voltooid, maak je een nieuw bestand met de naam main.py in de python-redis map. Open het bestand in je favoriete teksteditor en voer de onderstaande codeblokken in.

Begin met het importeren van de nieuw geïnstalleerde redis-py bibliotheek en stel de Redis host en het poortadres in:

import redis
redis_host = 'localhost'
redis_port = 6379

Definieer nu de waarden voor de WordPress post als sleutel/waarde paren in een dictionary. Hier is een voorbeeld:

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

Opmerking: In een echte applicatie zou de inhoud van een bericht waarschijnlijk afkomstig zijn van een HTML invoerformulier.

Voeg aan de code een redis_dict() functie toe die verbinding maakt met je lokale Redis server, de bovenstaande post opslaat in de Redis cache en de succesvol aangemaakte waarden naar de console print:

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()

Tenzij je Redis binnen Docker hebt gelanceerd, roep je de Redis commandoregelinterface aan met het volgende commando:

redis-cli

Voer nu je Python script uit:

python main.py

Het uitvoeren van het script voegt de post toe aan de Redis key-value store. Je zou de volgende reactie in de console van je terminal moeten zien:

Screenshot of the terminal showing data posted via Python to a Redis database.
Console output toont Python app post toegevoegd aan Redis opslag.

Je hebt met succes een bericht opgeslagen in je lokale Redis database.

Laten we nu dit bericht uploaden naar je WordPress site met behulp van de WordPress REST API, waarbij het wordt opgeslagen in de standaard MariaDB of MySQL database in plaats van Redis.

Een bericht uploaden naar WordPress met de REST API

De WordPress REST API biedt een reeks endpoints die je kunt callen vanuit je app om te communiceren met WordPress. We gebruiken het endpoint genaamd  “post” om een bericht aan te maken in WordPress.

Stap 1: Stel het applicatiewachtwoord in WordPress in

De WordPress API vereist een applicatiewachtwoord om je app toegang te geven tot gegevens van de WordPress site. Het wachtwoord is een geheime sleutel van 24 tekens die je in elk verzoek aan de REST API moet opnemen.

Maak een applicatiewachtwoord aan op de Users -> Profile pagina van het WordPress Dashboard. Je kunt aan elk applicatiewachtwoord een gebruikersvriendelijke naam toekennen, maar je kunt het wachtwoord zelf niet meer zien nadat je het hebt gegenereerd (dus maak nu een kopie):

Screenshot van de interface voor het genereren van een API wachtwoord in WordPress.
Een applicatiewachtwoord genereren in het WordPress Dashboard.

Stap 2: Post naar WordPress met je Python app

Installeer eerst de Python requests bibliotheek voor het doen van HTTP verzoeken aan de WordPress API. Voer hiervoor het volgende commando uit in de terminal:

pip install requests

Maak vervolgens in je python-redis map een nieuw bestand met de naam app.py. Open het bestand vervolgens met je teksteditor.

Begin met het importeren van de requests, json en base64 modules:

import requests
import json
import base64

Definieer de API basis URL, evenals je WordPress gebruikersnaam en wachtwoord. Gebruik voor de wachtwoordvariabele het applicatiewachtwoord dat je in WordPress hebt gegenereerd:

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

Voeg nu user en password samen, codeer het resultaat en geef het door aan de request headers:

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

En hier is de post body:

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

Stel het POST verzoek naar de API in en een commando om de responsstatus af te drukken:

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

Voer je script uit met de volgende opdracht in de terminal:

python app.py

Als je een 201 respons hebt ontvangen (“Created”), betekent dit dat de bron met succes is toegevoegd.

Screenshot van de terminal die een 201 responscode meldt na het plaatsen van een bericht naar WordPress via Python.
Een 201 responscode wordt geretourneerd bij een succesvolle post.

Je kunt dit bevestigen in je WordPress dashboard of in de MySQL/MariaDB database van je site.

Redis cache rechstreeks in WordPress gebruiken

WordPress websites kunnen de Redis cache gebruiken om tijdelijk objecten op te slaan, zoals berichten, pagina’s of gebruikers. Het object kan dan worden benaderd vanuit de cache wanneer dat nodig is. Deze aanpak bespaart kostbare tijd, vermindert latency en verbetert de capaciteit van de site om te schalen en meer verkeer aan te kunnen.

Redis voor Kinsta klanten

Een snelle laadtijd is van vitaal belang voor een prettige gebruikerservaring, en er is weinig ruimte voor ondermaatse prestaties. Daarom biedt Kinsta Redis als premium add-on.

Klanten die gebruik willen maken van de Redis add-on kunnen contact opnemen met Kinsta support en wij zorgen voor de installatie en de installatie.

Een Redis plugin installeren

Als je geen klant bent van Kinsta, dan moet je een speciale plugin installeren op je WordPress site.

Laten we bijvoorbeeld de Redis Object Cache plugin installeren op je lokale WordPress website.

Screenshot: De Redis Object Cache plugin selecteren voor installatie in WordPress.
De Redis Object Cache plugin.

Open het bestand wp-config.php in een teksteditor en voeg de volgende code toe in de sectie voor aangepaste configuratievariabelen:

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

Opmerking: Het adres van je Redis host hangt af van je serverconfiguratie.

Navigeer naar Settings > Redis in het WordPress dashboard. Je zou iets moeten zien dat hierop lijkt:

Screenshot: Instellingenpagina voor de Redis Object Cache plugin in WordPress.
De Redis Object Cache plugin wordt weergegeven binnen het tabblad Settings.

De Redis cache heeft nu met succes de vorige MySQL database vervangen.

Bovendien gebruikt de WordPress site aan de front-end dezelfde cache als de Python applicatie aan de back-end. Je kunt dit testen door een nieuwe terminal te openen en het volgende commando uit te voeren:

redis-cli monitor

Terwijl je door je site navigeert, worden websiteverzoeken uitgevoerd naar de opdrachtprompt:

Screenshot die Redis serververzoeken in de terminal laat zien.
Serververzoeken monitoren in de terminal met redis-cli.

Nu de front-end en back-end gesynchroniseerd zijn, kun je een nieuw bericht toevoegen aan WordPress met je Python app via de REST API.

Om dit te doen, wijzig je het POST object in app.py om je nieuwe post toe te voegen en voer je vervolgens python app.py uit om het bericht toe te voegen aan de cache.

Samenvatting

In dit artikel hebben we geleerd hoe je een Redis database kunt verbinden met een Python applicatie door gebruik te maken van de Redis Python client. Deze client ondersteunt verschillende formats voor Redis data stores: lijsten, sets, woordenboeken en andere commando datatypes.

We hebben ook gezien hoe je Redis kunt integreren in een WordPress site via de REST API en de Redis Object Cache plugin.

De mogelijkheid om Redis in-memory cache te gebruiken voor je site maakt het een krachtige en flexibele devtool. Redis is buitengewoon effectief in het verbeteren van de query-snelheid van je database, de prestaties van je site en de algemene gebruikerservaring.

Een bonus: je kunt de installatie van Redis voor je WordPress site door Kinsta laten uitvoeren. Bovendien zullen Redis fans hun favoriete server beschikbaar vinden als een stand-alone deployment in Kinsta’s Managed Database Hosting dienst.

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.