Daumenregel: Cron sollte regelmäßig für die Verwaltung Ihrer Website ausgeführt werden.
Sie haben in Ihrem Kommentar zu MPD erwähnt, dass Ihre cache_form-Tabelle trotz der Einrichtung und regelmäßigen Ausführung des Cron schnell wächst.
Eine Lösung besteht darin, Ihren Cron häufiger auszuführen. Sagen wir alle sechs Stunden oder weniger? Wenn Sie es sich nicht leisten können, lesen Sie weiter.
Alternative Lösung:
mymodule_cron() {
cache_clear_all(NULL, 'cache_form');
}
Wenn Sie Elysia Cron installieren , können Sie die Cron-Funktion Ihres Moduls separat ausführen. Sie können die Frequenz des Elysia-Cron beibehalten, damit das Modul alle sechs Stunden ausgeführt wird. Damit Ihr cache_form
Tisch alle sechs Stunden beschnitten wird.
Während dieses Bereinigungsvorgangs werden die Einträge, die nicht älter als 6 Stunden sind, nicht gelöscht. Wenn alle Einträge gelöscht werden, können sich alle Formulare, die zum Zeitpunkt des Löschens der Einträge gesendet werden, merkwürdig verhalten.
Sehen Sie sich den Code unter https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_cache/7 an
function form_set_cache($form_build_id, $form, $form_state) {
// 6 hours cache life time for forms should be plenty.
$expire = 21600;
Wie der Kommentar lautet, gehen sie davon aus, dass es reichlich sein sollte, und in Ihrem Fall wird es zu reichlich für Sie. Der Trick besteht also darin, entweder die cache_form-Tabelle häufiger zu löschen und den Wert von $ expire auf einen niedrigeren Wert zu reduzieren. Wenn Sie die cache_form-Einträge häufiger als den Standardwert von 6 sechs Stunden löschen möchten, müssen Sie die TTL von ändern die cache_form Einträge.
Sie können dies tun, indem Sie cacheboject installieren und dann implementieren, hook_cacheobject_presave
in welchem Zeitraum Sie die TTL auf 2 oder 3 Stunden ändern können.
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;
}
}
Ein Nachteil dieses Ansatzes ist, wenn die Formulare nicht innerhalb von 2 Stunden gesendet werden (der von Ihnen festgelegte RTL-Wert), die Formulardaten möglicherweise verloren gehen und einige Probleme mit abgelaufenen Formularen auftreten können.