2

Drupal 7 で次のキャッシュ動作を取得する方法について、より詳細な情報を探しています。

外部サービスから取得した情報をレンダリングするブロックが必要です。ブロックは多くのユーザーに対してレンダリングされるため、そのサービスから継続的にデータを要求するのではなく、結果をキャッシュします。ただし、このデータは比較的頻繁に変更されるため、5 分または 10 分ごとに最新のデータを取得して、再度キャッシュしたいと考えています。

自分でコードを書きすぎずに、このようなキャッシュ動作を実現する方法を知っている人はいますか? また、Drupal でキャッシュを使用する方法に関する適切なドキュメント (7) についてもあまり見つけられていないため、その点についての指針も高く評価されます。

4

3 に答える 3

4

cache_get()は、アイテムの有効期限が切れているかどうかを実際にはチェックしないことに注意してください。したがって、以下を使用する必要があります。

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

また、D7ではtime()ではなくREQUEST_TIME定数を使用してください。

于 2011-02-01T15:40:13.230 に答える
2

関数cache_set()およびcache_get()は、探しているものです。cache_set() には有効期限の引数があります。

基本的に次のように使用できます。

<?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;
?>

注: 別のキャッシュ ビンを使用することもできますが (ドキュメント リンクを参照)、対応するキャッシュ テーブルをスキーマの一部として自分で作成する必要があります。

于 2011-01-28T14:30:20.157 に答える