Лучшие практики хранения агрегированных данных по дате или другим критериям

2 мар. 2024 г., 19:21:08
Просмотры: 38
Голосов: 0

Я создаю сводные описания по годам. Для этого при сохранении использую update_post_meta чтобы установить значения количества слов, изображений и внешних ссылок.

Для страницы архива по годам я перебираю каждую запись, чтобы создать суммы, а затем форматирую результат.

С кэшированием я могу быть уверен, что пользователи получат закэшированные результаты.

Но во время разработки с включенным кэшированием я заметил некоторую медлительность.

Я рассматривал возможность использования механизма cron для создания HTML-сводок в подкаталоге папки wp-content или в виде элементов wp_object_cache с именами типа summary-YYYY.html для сводки или summary-YYYY.json.

Мой вопрос:

Какие у меня есть варианты для хранения подобных данных? Существуют ли лучшие практики для именования ключей в объектном кэше? Есть ли другие способы ассоциировать произвольные данные с годом?

0
Все ответы на вопрос 1
0

Я остановился на использовании wp_cache_set и wp_cache_get, что, кажется, работает хорошо. Я создаю ключ на основе класса, функции и параметров:

$cacheKey = self::createCacheKey( __CLASS__, __FUNCTION__, $referenceYear, $referenceMonth );

Метод createCacheKey() выглядит так:

protected static function createCacheKey( ...$args ): string {
    return implode('-', $args);
}

И я обязательно указываю подходящее время жизни кэша. Для дат, которые не относятся к текущему году или месяцу, я устанавливаю более длительные сроки хранения.

Получение и возврат кэша выглядит так в начале функции:

    $cacheKey = self::createCacheKey( __CLASS__,
                                      __FUNCTION__,
                                      $referenceYear, 
                                      $referenceMonth );
    $cache    = wp_cache_get( $cacheKey, self::CACHE_GROUP );
    if ( $cache ) {
        return $cache;
    }

А в конце этих функций я использую:

    wp_cache_set( $cacheKey, $output, 
                  self::CACHE_GROUP, $cacheExpiration );

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

4 мар. 2024 г. 07:19:51