캐시 지우기 작업을 완전히 이해하지 못했습니다. 캐시 지우기를 클릭하십시오 : 모든 캐시 지우기 : admin / config / development / performance에서 데이터베이스로 이동하여 모든 cache _... 테이블을 확인하면 비어있는 것이 없습니다.
이것이 정상입니까?
모든 cache _... 테이블을자를 수 있습니까?
사실 나는 cache_form을 지워야합니다. 이 테이블을자를 수 있습니까?
캐시 지우기 작업을 완전히 이해하지 못했습니다. 캐시 지우기를 클릭하십시오 : 모든 캐시 지우기 : admin / config / development / performance에서 데이터베이스로 이동하여 모든 cache _... 테이블을 확인하면 비어있는 것이 없습니다.
이것이 정상입니까?
모든 cache _... 테이블을자를 수 있습니까?
사실 나는 cache_form을 지워야합니다. 이 테이블을자를 수 있습니까?
답변:
모든 cache _... 테이블을자를 수 있습니까?
"cache_form"테이블은 Drupal에서 유효성을 검사하기 위해 사용하는 데이터를 포함하므로 잘라서는 안됩니다. 해당 테이블을 삭제하면 현재 사용자가 제출 한 양식이 무효화되고 사용자가 양식을 다시 제출해야합니다.
모듈이 이상하게 작동하게하는 다른 캐시 테이블이있을 수 있습니다. 이것이 추가 캐시 테이블을 사용하는 모듈 (일반적으로 "cache_"로 시작하는 모듈)이 Drupal에서 지울 수있는 캐시 테이블을 반환하기 위해 hook_flush_cache () 를 구현 해야하는 이유입니다 . 발 drupal_flush_all_caches () .
$core = array('cache', 'cache_path', 'cache_filter', 'cache_bootstrap', 'cache_page');
$cache_tables = array_merge(module_invoke_all('flush_caches'), $core);
foreach ($cache_tables as $table) {
cache_clear_all('*', $table, TRUE);
}
drupal_flush_all_caches()
성능 설정 페이지에서 "모든 캐시 지우기"단추를 클릭 할 때 호출되는 제출 양식 핸들러 인 system_clear_cache_submit () 에서 호출 된 함수 입니다.
cron 태스크 중에 system_cron () 은 다음 코드를 사용하여 캐시를 지 웁니다.
$core = array('cache', 'cache_path', 'cache_filter', 'cache_page', 'cache_form', 'cache_menu');
$cache_tables = array_merge(module_invoke_all('flush_caches'), $core);
foreach ($cache_tables as $table) {
cache_clear_all(NULL, $table);
}
의 첫 번째 인수로 cache_clear_all은 () 이다 NULL
, 실행 코드 DrupalDatabaseCache :: 명확 () (드루팔 7) 다음이다.
if (variable_get('cache_lifetime', 0)) {
// We store the time in the current user's $user->cache variable which
// will be saved into the sessions bin by _drupal_session_write(). We then
// simulate that the cache was flushed for this user by not returning
// cached data that was cached before the timestamp.
$user->cache = REQUEST_TIME;
$cache_flush = variable_get('cache_flush_' . $this->bin, 0);
if ($cache_flush == 0) {
// This is the first request to clear the cache, start a timer.
variable_set('cache_flush_' . $this->bin, REQUEST_TIME);
}
elseif (REQUEST_TIME > ($cache_flush + variable_get('cache_lifetime', 0))) {
// Clear the cache for everyone, cache_lifetime seconds have
// passed since the first request to clear the cache.
db_delete($this->bin)
->condition('expire', CACHE_PERMANENT, '<>')
->condition('expire', REQUEST_TIME, '<')
->execute();
variable_set('cache_flush_' . $this->bin, 0);
}
}
이 코드는에서 영구적으로 표시되지 않고 행에서 반환 된 테이블 hook_flush_caches()
과 "cache_form"을 포함하여 Drupal에서 사용 된 다양한 캐시 테이블에서 만료 된 행만 제거합니다 . "cache_form"에 너무 많은 행이 없어야합니다. 이 경우 cron 태스크를 두 번 연속으로 실행하는 데 걸리는 시간을 줄이거 나 사용자 정의 모듈에서 다음 코드를 실행할 수 있습니다.
cache_clear_all(NULL, 'cache_form');
다른 방법은 Devel 모듈과 표시되는 메뉴 링크를 사용하여 캐시를 수동으로 지우는 것입니다.
UI를 통해 캐시를 지우는 경우 페이지가 다시로드되면 캐시가 다시 채워지기 시작합니다. 즉, 해당 페이지를 새로 고치면 Drupal이 사물을 다시 캐시하기 시작합니다 (특히 cache_menu
).
DELETE FROM cache
다양한 테이블에서 안전하게 할 수 있습니다 .
또한 drush cc all
캐시 를 수행하면 캐시 테이블이 완전히 비워집니다.