Усиливаем WordPress с помощью Python и кэширования Redis

Узнайте как размещать контент непосредственно в кэше Redis, создав приложение на языке Python и как получать данные WordPress через Rest API

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

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

Что такое Redis?

Redis, или Remote Dictionary Server, — это быстрая NoSQL база данных и кэш in-memory, разработанная Сальваторе Санфилиппо и поддерживаемая Redis Ltd. (ранее Redi Labs). (ранее 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, включена в пакет по умолчанию.

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

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

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

Начните с создания новой папки для вашего проекта под названием python-redis. После этого запустите командный терминал, перейдите в папку 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': 'Тестовый пост 
связанный пост в блоге',
    'post_title': 'Мой первый пост',
    'post_excerpt': 'В этом посте я расскажу...',
    'post_status': 'publish',
    'comment_status': 'open',
    'ping_status': 'open',
    'post_password': 'my-post-pwd',
    'post_name': 'my-first-post',    
}

Дополните код функцией 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 "Что-то пошло не так {e}")

# Запускает функцию:
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. Мы используем конечную точку post для создания поста в WordPress.

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

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

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

Генерация пароля приложения в WordPress Dashboard.

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

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

pip install requests

Затем в папке python-redis создайте новый файл с именем app.py. Затем откройте файл в текстовом редакторе.

Начните с импорта модулей requests, json и base64:

import requests
import json
import base64

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

url = 'http://localhost/wp-json/wp/v2'
user = '<Ваше имя пользователя здесь>'
password = '<Ваш пароль приложения здесь>'

Теперь соедините 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': 'Тестовый пост 
связанный пост блога',
    'title': 'Мой второй пост',
    'excerpt': 'В этом посте я расскажу...',
    '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 («Created»), это означает, что ресурс был успешно добавлен.

Код ответа 201 возвращается при успешном добавлении поста.

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

Использование кэша Redis непосредственно в WordPress

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

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

Вам нужно будет установить специальный плагин на свой сайт 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 зависит от конфигурации вашего сервера.

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

Плагин Redis Object Cache отображается на вкладке » Настройки «.

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

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

redis-cli monitor

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

Мониторинг запросов сервера в терминале с помощью 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

Обратная связь

Если у вас возникнут вопросы или потребуется техническая поддержка, не стесняйтесь обращаться. Связаться с нами можно через контактные данные:

  • Электронная почта: Пишите нам на info@kowalski.su для подробных запросов или отправки дополнительных материалов. Мы обеспечиваем оперативный ответ и всестороннюю информацию.
  • Телефон: Звоните на номер +7 (906) 825 44-41 для немедленной помощи или консультации. Рабочие часы с 7:00 до 15:00 (МСК).
  • Telegram: Для быстрой связи используйте наш Telegram-канал @ivan_zh. Идеально подходит для получения оперативных ответов.

Откройте новые возможности с интеграцией WordPress и Bitrix24

Отличных вам сайтов!

Задать вопрос