Bir önbellekten girdileri silmek için cache_clear_all () kullanmanız gerekir . Bunun nedeni, kullanılan önbellek uygulamasının etkin veritabanında bir veritabanı tablosu kullanamamasıdır. DrupalDatabaseCache sınıfında olan budur , ancak her sınıf için doğru olmamalıdır.
_Cache_get_object () 'ye ( cache_get () ve cache_set () tarafından çağrılan işlev ) bakarsanız , aşağıdaki kodu içerdiğini göreceksiniz.
static $cache_objects;
if (!isset($cache_objects[$bin])) {
$class = variable_get('cache_class_' . $bin);
if (!isset($class)) {
$class = variable_get('cache_default_class', 'DrupalDatabaseCache');
}
$cache_objects[$bin] = new $class($bin);
}
return $cache_objects[$bin];
Önbellek uygulaması sınıfı her önbellek kutusu deposu için farklı olabilir ve hatta varsayılanı değiştirilebilir.
Özel güncelleme durumu önbellek sistemi , normal önbellek işlevlerinin _update_cache_clear () , _update_cache_get () ve _update_cache_set () 'de neden kullanılmadığını tam olarak açıklar . (Vurgu benimdir.)
Özellikle mevcut güncellemelerle ilgili getirilen verileri kaydetmek için temel önbellek API'sını KULLANMAYIZ. Bu önbelleğin yalnızca kullanılabilir yeni güncelleme verilerini başarıyla getirdikten sonra doldurduğumuzda temizlenmesi çok önemlidir. Çekirdek önbellek API'sinin kullanılması, bir sitenin "minimum önbellek ömrü" (hem minimum hem de maksimum) tanımlanmış olması da dahil olmak üzere her zaman kullanılabilir güncelleme verilerini getirmeye çalışılmasına neden olabilecek her türlü potansiyel sorunla sonuçlanır. veya bir site memcache veya geçici önbellekleri kabul eden başka bir takılabilir önbellek sistemi kullanıyorsa.
Güncelleme Yöneticisi modülü hala {cache_update} tablosunu kullanır, ancak yerine kullanılarak cache_set()
, cache_get()
ve cache_clear_all()
orada bu aynı temel görevleri yerine ancak önbellek zamanından önce temizlenmez sağlamak Özel yardımcı fonksiyonları vardır ve veriler her zaman depolandığını, veritabanı, memcache veya başka bir önbellek arka uç kullanılıyor olsa bile.
Güncelleme Yöneticisi'nin Drupal çalıştıran herhangi bir siteden güncelleme bilgilerini potansiyel olarak alabileceğini göz önünde bulundurarak, güncelleme bilgilerini çok sık almaya çalışmak Drupal.org sunucularıyla ilgili sorunlara neden olacağından, Güncelleme Yöneticisi'nin gerekli özel ihtiyaçları vardır.
Sizin durumunuzda, [module_name]__[entity_type]__[entity_id]__[string_depending_on_where_the_cache_came_from]
tek bir önbellek kutusu deposu için önbellek kimliği olarak kullanabilirsiniz . Bir varlığın tüm girdilerini silmeniz gerekiyorsa, aşağıdaki kodu kullanabilirsiniz.
cache_clear_all("{$module}__{$entity_type}__{$entity_id}__", $bin, TRUE);
$module
Önbelleği temizlerken atanacak değeri alamıyorsanız veya önbellek girişini, verilerin önbelleğe alındığı modülden bağımsız olarak silmek istiyorsanız [entity_type]__[entity_id]__[string_depending_on_where_the_cache_came_from]
, veya gibi farklı bir önbellek kimliği kullanabilirsiniz [entity_type]__[entity_id]__[module_name]__[string_depending_on_where_the_cache_came_from]
. cache_clear_all()
ne zaman bir önbellek kimlik argüman olarak geçirilen dize ile başlayan tüm önbellek girdilerini siler $wildcard
olduğunu TRUE
ve önbellek kimliği değil '*'
. Bu durumda, önbellek aşağıdaki kodla temizlenir.
cache_clear_all("{$entity_type}__{$entity_id}__", $bin, TRUE);
db_delete()
?