Quy tắc ngón tay cái: Cron nên được chạy thường xuyên để quản lý trang web của bạn.
Bạn đã đề cập trong nhận xét của mình với MPD rằng mặc dù thiết lập cron và chạy chúng thường xuyên, bảng cache_form của bạn sẽ tăng lên nhanh chóng.
Một giải pháp cho điều đó là chạy cron của bạn thường xuyên hơn. Nói cứ sau sáu giờ hoặc ít hơn? Nếu bạn không đủ khả năng để làm điều đó đọc thêm.
Giải pháp thay thế:
mymodule_cron() {
cache_clear_all(NULL, 'cache_form');
}
Cài đặt Elysia Cron và bây giờ bạn có thể chạy chức năng cron của mô-đun riêng. Bạn có thể giữ tần số của cron Elysia cho mô-đun của bạn để chạy cứ sau sáu giờ. Vì vậy, cache_form
bàn của bạn được cắt tỉa cứ sau sáu giờ.
Trong quá trình cắt tỉa này, các mục không quá 6 giờ sẽ không bị xóa. Lý do là, nếu tất cả các mục bị xóa thì bất kỳ biểu mẫu nào đang được gửi tại thời điểm xóa các mục có thể hành xử kỳ lạ.
Nhìn vào mã trong https://api.drupal.org/api/drupal/includes!form.inc/feft/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;
Khi bình luận đọc, họ cho rằng nó sẽ rất nhiều và trong trường hợp của bạn, nó đang trở nên quá nhiều đối với bạn. Vì vậy, mẹo là xóa bảng cache_form thường xuyên hơn và giảm giá trị $ hết hạn xuống giá trị thấp hơn, nếu bạn muốn xóa các mục cache_form thường xuyên hơn giá trị mặc định là 6 sáu giờ thì bạn cần thay đổi TTL các mục cache_form.
Bạn có thể làm điều đó bằng cách cài đặt bộ đệm ẩn và sau đó thực hiện hook_cacheobject_presave
trong đó bạn có thể thay đổi TTL thành 2 hoặc 3 giờ.
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;
}
}
Một nhược điểm của phương pháp này là nếu các biểu mẫu không được gửi trong vòng 2 giờ (giá trị RTL bạn đặt) thì dữ liệu biểu mẫu có thể bị mất và bạn có thể gặp một số vấn đề về biểu mẫu đã hết hạn.