В мире Python многие разработчики любят базу данных NoSQL Redis из-за ее скорости и наличия надежного набора клиентских библиотек. В мире WordPress Redis часто используется в тех случаях, когда для ускорения доступа к внутренним данным необходим постоянный кэш объектов.

Вы можете объединить эти два мира, манипулируя содержимым WordPress с помощью приложения Python.

В этом руководстве мы покажем, как публиковать контент непосредственно в Redis, создавая приложение Python, использующее популярную библиотеку redis-py, и как публиковать контент через REST API WordPress.

Что такое Редис?

Redis, или Remote Dictionary Server, — это быстрая база данных NoSQL и кэш в памяти, разработанная Сальваторе Санфилиппо и поддерживаемая Redis Ltd. (ранее Redi Labs). Релизы Redis с открытым исходным кодом доступны по лицензии Berkeley Source Distribution (BSD), а Redis Ltd. также предоставляет коммерческие корпоративные и облачные версии сервера.

Redis отличается от других баз данных NoSQL своим механизмом хранения данных. Его обычно называют хранилищем структур данных, поскольку оно хранит данные тех же типов, что и во многих языках программирования, включая строки, наборы, списки и словари (или хеши). Помимо поддержки простых структур, Redis поддерживает расширенные структуры данных для таких задач, как геолокация и потоковая обработка.

Предварительные требования для приложения Python

Прежде чем приступить к созданию приложения, вам необходимо локально установить следующие три элемента:

  • Redis — если вам нужны какие-либо рекомендации, обратитесь к официальному руководству по установке Redis.
  • WordPress — ознакомьтесь с нашим руководством по установке WordPress для Windows, macOS и Linux. Убедитесь, что интерфейс WordPress подключен к базе данных MariaDB или MySQL.
  • Python и pip. Начиная с Python 3.4, pip, установщик пакетов Python, включен по умолчанию.

Совет профессионала: вы можете легко создать эту среду разработки в Docker, установив готовый к WordPress пакет DevKinsta от Kinsta.

Когда необходимые компоненты установлены, пришло время заставить все работать вместе. В частности, вы создаете приложение Python, которое принимает сообщение WordPress пользователя в формате словаря и сохраняет его в кеш Redis.

Создание приложения Python для хранения сообщения в кеше Redis

Кэш Redis — это эффективный механизм кэширования веб-сайтов. Он хранит часто запрашиваемую информацию для более быстрого и удобного доступа. Кэш хранит информацию в структуре данных «ключ-значение».

Начните с создания новой папки для вашего проекта с именем Python-Redis. После этого запустите командный терминал, cd к Python-Redisи установите redis-py, выполнив следующую команду:

pip install redis

После завершения установки создайте новый файл с именем main.py в Python-Redis каталог. Откройте файл в своем любимом текстовом редакторе, чтобы ввести приведенные ниже блоки кода.

Начните с импорта вновь установленного Redis-py библиотеку и установите адрес хоста и порта Redis:

import redis
redis_host="localhost"
redis_port = 6379

Теперь определите значения для публикации WordPress как пары ключ/значение в словаре. Вот пример:

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

Примечание: В реальном приложении контент публикации, скорее всего, будет поступать из формы ввода HTML.

Добавьте в код с помощью redis_dict() функция, которая будет подключаться к вашему локальному серверу Redis, сохранять указанное выше сообщение в кеше Redis и выводить успешно созданные значения на консоль:

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

Если вы не запускали Redis в Docker, вызовите интерфейс командной строки Redis с помощью следующей команды:

redis-cli

Теперь запустите скрипт Python:

python main.py

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

Вывод консоли, показывающий публикацию приложения Python, добавленную в хранилище Redis.

Вы успешно сохранили сообщение в своей локальной базе данных Redis.

Теперь давайте загрузим этот пост на ваш сайт WordPress, используя WordPress REST API, сохранив его в базе данных MariaDB или MySQL по умолчанию вместо Redis.

Загрузите публикацию в WordPress, используя REST API.

WordPress REST API предоставляет набор конечных точек, которые вы можете вызывать из своего приложения для взаимодействия с WordPress. Мы используем конечную точку сообщения для создания сообщения в WordPress.

Шаг 1. Установите пароль приложения в WordPress

WordPress API требует пароль приложения, чтобы разрешить вашему приложению доступ к данным с сайта WordPress. Пароль представляет собой 24-значный секретный ключ, который необходимо включать в каждый запрос к REST API.

Сгенерируйте пароль приложения на Профиль пользователя страница панели управления WordPress. Вы можете присвоить каждому паролю приложения удобное имя, но вы не сможете просмотреть сам пароль после его генерации (поэтому сделайте копию сейчас):

Снимок экрана, показывающий интерфейс для генерации пароля API в WordPress.
Генерация пароля приложения в панели управления WordPress.

Шаг 2. Публикуйте сообщения в WordPress с помощью приложения Python

Сначала установите Python Запросы библиотека для выполнения HTTP-запроса к API WordPress. Для этого выполните на терминале следующую команду:

pip install requests

Далее внутри вашего Python-Redis папку, создайте новый файл с именем app.py. Затем откройте файл в текстовом редакторе.

Начните с импорта Запросы, JSONи база64 модули:

import requests
import json
import base64

Определите базовый URL-адрес API, а также имя пользователя и пароль WordPress. В качестве переменной пароля используйте пароль приложения, сгенерированный вами в WordPress:

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

Теперь присоединяйтесь user и passwordзакодируйте результат и передайте его в заголовки запроса:

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

А вот тело сообщения:

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

Настройте POST-запрос к API и команду для печати статуса ответа:

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

Запустите скрипт с помощью следующей команды в терминале:

python app.py

Если вы получили ответ 201 («Создано»), это означает, что ресурс был успешно добавлен.

Снимок экрана терминала, сообщающего о коде ответа 201 после публикации в WordPress через Python.
Код ответа 201 возвращается при успешном сообщении.

Вы можете подтвердить это на панели управления WordPress или в базе данных MySQL/MariaDB вашего сайта.

Используйте кеш Redis непосредственно в WordPress

Веб-сайты WordPress могут использовать кеш Redis для временного хранения объектов, таких как записи, страницы или пользователи. При необходимости к объекту можно будет получить доступ из кэша. Такой подход экономит драгоценное время, уменьшает задержку и улучшает способность сайта масштабироваться и обрабатывать больший трафик.

Redis для клиентов Kinsta

Быстрое время загрузки жизненно важно для приятного пользовательского опыта, и здесь мало места для низкой производительности. Вот почему Kinsta предоставляет Redis в качестве дополнения премиум-класса.

Клиентам, которые хотели бы воспользоваться надстройкой Redis, просто обратитесь в службу поддержки Kinsta, и мы позаботимся о процессе установки и настроим его для вас.

Установка плагина Redis

Если вы не являетесь клиентом Kinsta, вам необходимо установить специальный плагин на свой сайт WordPress.

Например, давайте установим плагин Redis Object Cache на ваш локальный веб-сайт WordPress.

Снимок экрана: Выбор плагина Redis Object Cache для установки в WordPress.
Плагин Redis Object Cache.

Открой wp-config.php файл в текстовом редакторе и добавьте следующий код в раздел для пользовательских переменных конфигурации:

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

Примечание: Адрес вашего хоста Redis будет зависеть от конфигурации вашего сервера.

Перейдите к Настройки > Редис в панели управления WordPress. Вы должны увидеть что-то похожее на это:

Снимок экрана: страница настроек плагина Redis Object Cache в WordPress.
Плагин Redis Object Cache отображается внутри Настройки вкладка.

Кэш Redis теперь успешно заменил предыдущую базу данных MySQL.

Кроме того, внешний сайт WordPress использует тот же кеш, что и серверное приложение Python. Вы можете проверить это, открыв новый терминал и выполнив следующую команду:

redis-cli monitor

При навигации по сайту запросы веб-сайта будут выводиться в командную строку:

Снимок экрана, показывающий запросы сервера Redis в терминале.
Мониторинг запросов к серверу в терминале с помощью Redis-Cli.

Теперь, когда интерфейсная и серверная части синхронизированы, вы можете добавить новую публикацию в WordPress с помощью приложения Python через REST API.

Для этого измените объект POST в app.py чтобы включить новое сообщение, затем запустите python app.py чтобы добавить публикацию в кеш.

Краткое содержание

В этой статье мы узнали, как подключить базу данных Redis к приложению Python с помощью клиента Redis Python. Этот клиент поддерживает несколько форматов хранилищ данных Redis: списки, наборы, словари и другие типы данных команд.

Мы также увидели, как можно интегрировать Redis в сайт WordPress через REST API и плагин Redis Object Cache.

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

Бонус: вы можете поручить Kinsta выполнить установку Redis для вашего сайта WordPress. Кроме того, поклонники Redis найдут свой любимый сервер доступным в виде автономной реализации в службе управляемого хостинга баз данных Kinsta.