Правило большого пальца: Cron должен регулярно запускаться для ведения вашего сайта.
В своем комментарии к MPD вы упомянули, что, несмотря на настройку cron и их регулярный запуск, ваша таблица cache_form быстро растет.
Одним из решений этой проблемы является более частое использование cron. Сказать каждые шесть часов или меньше? Если вы не можете позволить себе это сделать, читайте дальше.
Альтернативное решение:
mymodule_cron() {
cache_clear_all(NULL, 'cache_form');
}
Установите Elysia Cron, и теперь вы можете запускать функцию cron вашего модуля отдельно. Вы можете сохранять частоту запуска модуля Elysia cron каждые шесть часов. Так что ваш cache_form
стол сокращается каждые шесть часов.
Во время этого процесса удаления записи, которые не старше 6 часов, не будут удалены. Причина в том, что, если все записи удаляются, то любые формы, которые отправляются во время удаления записей, могут вести себя странно.
Посмотрите на код в https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_cache/7
function form_set_cache($form_build_id, $form, $form_state) {
// 6 hours cache life time for forms should be plenty.
$expire = 21600;
Как говорится в комментарии, они предполагают, что этого должно быть достаточно, а в вашем случае этого становится слишком много для вас. Таким образом, хитрость заключается в том, чтобы либо чаще очищать таблицу cache_form, либо уменьшать значение $ expire до более низкого значения, если вы хотите очищать записи cache_form чаще, чем значение по умолчанию, равное 6 шести часам, то вам необходимо изменить TTL записи cache_form.
Вы можете сделать это, установив cacheboject, а затем внедрив, в hook_cacheobject_presave
течение которого вы можете изменить TTL, на 2 или 3 часа.
mymodule_cacheobject_presave()($object, $cid, $bin) {
// Extend the expiry period for prototype forms used in ajax enabled forms.
$cache_ttl = 1 ; // Change it to any number of hours
if ($bin == 'cache_form') {
$object->expire = REQUEST_TIME + $cache_ttl * 3600;
}
}
Недостатком этого подхода является то, что если формы не будут отправлены в течение 2 часов (заданное вами значение RTL), данные формы могут быть потеряны и у вас могут возникнуть проблемы с истекшим сроком действия формы.