2 Stimmen

Einen zeitgesteuerten Cache in Drupal erstellen

Ich bin auf der Suche nach detaillierteren Informationen darüber, wie ich das folgende Caching-Verhalten in Drupal 7 erhalten kann.

Ich möchte einen Block, der Informationen wiedergibt, die ich von einem externen Dienst abrufe. Da der Block für viele Benutzer gerendert wird, möchte ich nicht ständig Daten von diesem Dienst anfordern, sondern das Ergebnis zwischenlagern. Da sich diese Daten jedoch relativ häufig ändern, möchte ich die neuesten Daten alle 5 oder 10 Minuten abrufen und sie dann erneut zwischenspeichern.

Weiß jemand, wie man ein solches Caching-Verhalten erreichen kann, ohne zu viel Code selbst zu schreiben? Ich habe auch nicht viel in Bezug auf eine gute Dokumentation über die Verwendung von Caching in Drupal (7) gefunden, so dass alle Hinweise auf, dass auch geschätzt werden.

4voto

Dave Reid Punkte 1250

Beachten Sie, dass cache_get() nicht überprüft, ob ein Element abgelaufen ist oder nicht. Sie müssen also verwenden:

if (($cache = cache_get('your_cache_key')) && $cache->expire >= REQUEST_TIME) {
  return $cache->data;
}

Stellen Sie außerdem sicher, dass Sie die Konstante REQUEST_TIME und nicht time() in D7 verwenden.

2voto

Berdir Punkte 6861

Die Funktionen cache_set() y cache_get() sind das, wonach Sie suchen. cache_set() hat ein expire-Argument.

Sie können sie im Wesentlichen so verwenden:

<?php
if ($cached_data = cache_get('your_cache_key')) {
  // Return from cache.
  return $cached_data->data;
}

// No or outdated cache entry, refresh data.
$data = _your_module_get_data_from_external_service();
// Save data in cache with 5min expiration time.
cache_set('your_cache_key', $data, 'cache', time() + 60 * 5);
return $data;
?>

Hinweis: Sie können auch einen anderen Cache-Bin verwenden (siehe Dokumentationslinks), aber Sie müssen selbst eine entsprechende Cache-Tabelle als Teil Ihres Schemas erstellen.

0voto

Vincent Punkte 365

Ich denke, dies sollte sein $cache->expire nicht abläuft. Ich hatte kein Glück mit diesem Beispiel, wenn ich die Einstellung REQUEST_TIME + 300 in cache_set() seit $cache->expires wird immer kleiner sein als REQUEST_TIME . Das funktioniert bei mir:

if (($cache = cache_get('your_cache_key', 'cache')) && (REQUEST_TIME < $cache->expire)) {
  return $cache->data;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X