ウェブサイトには、「定期的に更新する必要はあるが、アクセスする都度はデータを更新する必要はない」という特徴のデータもありますね。例えば、アクセスランキングなどです。そういった場合、データをキャッシュに保存しておき、一定期間はキャッシュを参照する、という実装にすることで、サーバー負荷軽減・応答速度向上につながります。
WordPressでは、このようなキャッシュ機能を提供する Transient API が用意されています。
キャッシュ機能
update_option()等のオプションAPIで設定したデータは、delete_option()で削除するまではずっと有効になります。
「ずっと」ではなくて、一定時間だけ保存したい場合には、Transient APIを使います。Transient APIを使うと、データベースoptionsテーブルに、
- データの中身を保存するオプション
- オプションの有効期限を保存するオプション
の2つが保存されます。
追加、更新はset_transient()関数
set_transient()関数で、一定時間だけ保存したいデータを保存します。
set_transient( $transient, $value, $expireation );
// $transient : キャッシュの名前。
// $value : キャッシュの値
// $expireation : 有効期間を秒数で指定。デフォルトは0で、0を指定すると有効期限は無期限
例: 名前は sample、値は abcde、有効期間は30分後の場合
set_transient( 'sample', 'abcde', 30 * MINUTE_IN_SECONDS );
↑ のように書くと、一定期間有効なデータがoptionsテーブルに保存されます。_transient_*******
に値が保存され、 _transient_timeout_*******
に有効期限が保存されます。******* の部分はキャッシュの名前が入ります。
※なお、_transient_timeout_*******
に保存される有効期限はUnixタイムスタンプです。人間に読みやすい時間への換算はUNIX時間の換算をごらんください。
get_transient()関数
キャッシュデータを取得するには get_transient()関数を使います。
get_transient( $transient );
// $transient : キャッシュの名前
例: 名前 sample のキャッシュを取得する場合
$cache_sample = get_transient( 'sample' );
get_transient()
でデータベースからデータを取得できます。実行した時点で、キャッシュ有効期限を過ぎていた場合はfalseが返ります。
コードの例としては、↓ のようになります。
function get_transient_data(){
// キャッシュデータがあれば、それを返して終了
$data = get_transient( 'transient_data' );
if ($data) {
return $data;
}
// キャッシュがない場合は↓を実行
$data = ....; // データを取得する処理を書く
set_transient( 'transient_data', $data, MINUTE_IN_SECONDS * 60 ); // キャッシュを記録する
return $data;
}
有効期限を指定するときは、WordPress で時間を便利に扱う で紹介した定数「MINUTE_IN_SECONDS : 分、 HOUR_IN_SECONDS : 時間、DAY_IN_SECONDS : 日、 WEEK_IN_SECONDS : 週、 MONTH_IN_SECONDS : 月、 YEAR_IN_SECONDS : 年」が便利です。
delete_transient()関数
キャッシュを削除したい場合は、delete_transient()
関数が用意されています。
set_transient()
で作成したキャッシュは、有効期限が経過すれば自動的に無効になります。また有効期限内でも再びset_transient()
を実行すれば更新されます。このため、明示的に削除したいケースはあまりないかもしれません。
delete_transient( $transient );
// $transient : キャッシュの名前。
公開日: