WP Кеш модул за над 1000 нови публикации ежедневно

DonMakaveli

Well-Known Member
Здравейте,

Имам един проблем и той е свързан с кеширането на стотици нови публикации в WP всеки ден.

Добавям всеки ден над 1000 публикации в моя уебсайт и всеки път, когато пусна нова публикация, тя се показва на началната страница и в съответната категория / таг. В момента използвам w3 total cache (безплатна) версия, всеки път, когато актуализирам един пост, той кешира цялата страница. От там става и проблем с кеш модулите които до сега съм ползвал, защото при всяко ъпдейтване/публикуване на статия кешираните страници като Началната/Категориите свързани със статията/Тагове/Автор - всички тези страници "Page cahe" бива изтриван и съответно трябва да се генерира на ново, което в случая при нас когато се правят над 1000 публикации на ден все едно няма кеш модул.

Бих искал да има метод на кеш, който актуализира страницата в зададен час или някакъв избран момент, когато потребителят влезе в страницата. Например:
Да речем, че искам да настроя страницата да се актуализира на всеки 3 часа (само когато потребителят влезе в конкретната страница).
  1. Потребител 1 влиза (Страница 1) по време (13:00) -> страница се кешира.
  2. Потребител 2 влиза (страница 1) по време (14:00) -> му показва кешираната страница.
  3. Потребител 3 влиза (страница 1) навреме (19:00) -> страницата се прекешира повторно.
Надявам се, че ме разбрахте за какво говоря... Кой плъгин ще бъде най-подходящ за това, което търся? Другият проблем е, че имам близо 1 милион страници, така че автоматичното кеширане за всички страници не е опция. Идеята е възможно най-малко натоварване на сървъра.

Благодаря предварително.
 
Кеша трябва да се трие само за поста, страницата, елемента, които се обновяват. Не целият кеш на сайта. (conditional purge е на английски).

Не съм сигурен дали w3 total cache поддържа такава функция. Аз лично използвам комбинация от fastcgi cache в рамта (за php заявките) с Nginx https://wordpress.org/plugins/nginx-helper и redis за дейтабейс заявките.
 
автоматичното кеширане за всички страници не е опция
Те се кешират, когато някой ги отвори.
По-важното в случая е колко трафик има.

Ако смяташ да бълваш по 1К постове на ден по-добре го направи в клон на сайта и синхронизирай базата периодично. И един rsync за изображенията. Това разбира се е валидно само, ако няма ъпдейти от потребителите (т.е коментарите са забранени и това не е магазин)

Не си обяснил целта на цялото това упражнение и как се добавят публикациите. Ако както подозирам си добарал някой архив с деиндексирано съдържание и не искаш да го плеснеш на куп то наливаш всичко наведнъж като на чънкове по 1К сменяш датата на публикуване. Забраняваш wp_cron и си пускаш ръчен някъде посред нощ да ги публикува.

Кеша трябва да се трие само за поста, страницата, елемента, които се обновяват. Не целият кеш на сайта. (conditional purge е на английски).

Не съм сигурен дали w3 total cache поддържа такава функция.
При добавяне на пост w3tc трие кеша на фронта, категорията и тага. Целият кеш може да се трие ръчно
 
Последно редактирано:
При добавяне на пост w3tc трие кеша на фронта, категорията и тага. Целият кеш може да се трие ръчно

Какво точно имаш предвид под "трие кеша на фронта"?

Anywayz, Разгледах документацията на w3 total cache и все ми се струва, че автора пропуска нещо, защото не би трябвало да има проблема, който описва, защото плъгина има доста настройки. Включително cache preload и conditional purge.
 
Какво точно имаш предвид под "трие кеша на фронта"?
Трие се кеша на агрегатните страници, в които ще появи новият пост като фронтпейджа, категории, тагове и глупости от сорта на автор архив(ако не са забранени).
 
Ако мислиш да правиш нещо голямо то го раздели на части. Правиш няколко иснталации а има и плъгини за разделяне на поддомейни.
Давам базов пример а вие си мислете за структурата защото ако бълвате с тези скорости скоро ще "угаснете"
Домейн.ком Главната страница
зеленчуци.домейн.ком > страница с постове за зеленчуци
марули.домейн.ком > страница за марули
картинки.домейн.ком > там слагате картинките
и вече може да ги сложите на различни места като различни планове, KVM или OpenVZ виртуалки или каквото ви роди главата.
Сядате чертаете, планирате и решавате проблема за да може всичко да се оптимизира и да се зарежда добре, да имате възможност за кеширане на отделните неща, ако щете и лоад балансиг може да направите.
Структури и решения много, пари пак много :)
Ако имате някакви виждания мога да ви развия някаква структура стига да знаете какво искате и колко може да вложите.

П.С. отваряте си function.php и си дописвате правила за кеш
пример: add_filter( 'wp_feed_cache_transient_lifetime', create_function('$a', 'return 6000;') );
 
Няма да се размине само с мемкеш примерно. По прости сметки след 30к поста ще започне да згъва WP кеша. Трябва си му ВПС. 1 GB VPS може и да се справя добре ако няма голям трафик. Основните правила за настройка на nginx, php и MySQL са същите като за сайта с голям трафик. Примерно VPS, нает от DigitalOcean (месечна такса 20 USD) със следните параметри: 2 GB памет, 2 процесора, 40 GB SSD. Версия CentOS Linux 7.3. WP Super Cache плъгин с Микрокеширане в nginx.
fastcgi_cache_path /var/cache/nginx/fcgi levels=1:2 keys_zone=microcache:10m max_size=1024m inactive=1h;

fastcgi_cache microcache;
fastcgi_cache_key $scheme$host$request_uri$request_method;
fastcgi_cache_valid 200 301 302 30s;
fastcgi_cache_use_stale updating error timeout invalid_header http_500;
fastcgi_pass_header Set-Cookie;
fastcgi_pass_header Cookie;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

Защото иначе с заяките за търсене ще згъне цялото нещо и ще трябва да слагат нещо от сорта на еластик сърчове и тем подобни.
 
О пропуснал съм го някъде... ако си на споделен хостинг затвори темата направо :) няма смисъл да се коментира :)
 
Аз бих заложил на Nginx или Varnish, без никакви плъгини. На на горната Nginx конфигурация не й разбрах смисъла. Бих я направил с дълъг inactive, valid 3h както иска автора и revalidate за да не се recache-ва съдържание, което не е променяно. Също бих игнорирал напълно всякакви cookie хедъри ако никой посетител не се логва в сайта, а /wp-admin може просто da e в отделен location блок.
 
Аз бих заложил на Nginx или Varnish, без никакви плъгини. На на горната Nginx конфигурация не й разбрах смисъла. Бих я направил с дълъг inactive, valid 3h както иска автора и revalidate за да не се recache-ва съдържание, което не е променяно. Също бих игнорирал напълно всякакви cookie хедъри ако никой посетител не се логва в сайта, а /wp-admin може просто da e в отделен location блок.
Бих добавил един cron job за разтоварване на РАМ паметта на някакъв интервал от време. Но подобни конфигурации на споделен хостинг са невъзможни.
 

Горе