Rememberable はremember()
クエリメソッドを追加する Laravel の Eloquent 特性です。これにより、クエリ結果を調整可能な期間キャッシュすることが非常に簡単になります。
// Get a the first user's posts and remember them for a day.
User:: first ()-> remember ( now ()-> addDay ())-> posts ()-> get ();
// You can also pass the number of seconds if you like (before Laravel 5.8 this will be interpreted as minutes).
User:: first ()-> remember ( 60 * 60 * 24 )-> posts ()-> get ();
これは、使用された SQL クエリを記憶し、結果を保存するだけで機能します。キャッシュが保持されている間に同じクエリが試行されると、データベースに再度アクセスするのではなく、ストアからクエリが取得されます。
他の場合と同様に、Composer を使用してインストールします。
composer require watson/rememberable
Eloquent を使い始める最も簡単な方法は、アプリケーション モデルを拡張できる抽象的なAppModel
を作成することです。この基本モデルでは、モデルから構築するクエリに同じキャッシュ機能を拡張する記憶可能な特性をインポートできます。
<?php
namespace App ;
use Watson Rememberable Rememberable ;
use Illuminate Database Eloquent Model as Eloquent ;
abstract class Model extends Eloquent
{
use Rememberable;
}
ここで、アプリケーションが Eloquent ではなくこの新しいAppModel
からモデル化されていることを確認してください。
<?php
namespace App ;
class Post extends Model
{
//
}
あるいは、 remember()
を使用したいすべてのモデルに特性を単純に適用することもできます。
remember メソッドの使用は非常に簡単です。そのクエリの結果をキャッシュに保存する秒数を渡すだけで、その時間枠内で同じクエリが呼び出されるたびに、結果がデータベースから再び取得されるのではなく、キャッシュから取得されます。
// Remember the number of users for an hour.
$ users = User:: remember ( 60 * 60 )-> count ();
特定のクエリにタグを付けたい場合は、 cacheTags('tag_name')
をクエリに追加できます。キャッシュ タグはすべてのキャッシュ ドライバーでサポートされているわけではないことに注意してください。
// Remember the number of users for an hour and tag it with 'user_queries'
User:: remember ( 60 * 60 )-> cacheTags ( ' user_queries ' )-> count ();
各クエリのキャッシュ キーに一意のプレフィックスを追加したい場合 (たとえば、キャッシュがタグ付けをサポートしていない場合)、クエリにprefix('prefix')
を追加できます。
// Remember the number of users for an hour and prefix the key with 'users'
User:: remember ( 60 * 60 )-> prefix ( ' users ' )-> count ();
あるいは、 $rememberCachePrefix
プロパティをモデルに追加して、常にそのキャッシュ プレフィックスを使用することもできます。
カスタム キャッシュ ドライバー (config/cache.php で定義) を使用したい場合はcacheDriver('cacheDriver')
をクエリに追加できます。
// Remember the number of users for an hour using redis as cache driver
User:: remember ( 60 * 60 )-> cacheDriver ( ' redis ' )-> count ();
あるいは、 $rememberCacheDriver
プロパティをモデルに追加して、そのキャッシュ ドライバーを常に使用することもできます。
クエリのタグ付けに使用する一意の文字列を$rememberCacheTag
プロパティに設定することで、モデルのすべてのクエリにキャッシュ タグを設定できます。
クエリごとにクエリをキャッシュすることで動作を検証します。これは、明示的に指定しない限り、eager-loading を実行するときに追加のクエリもキャッシュされないことを意味します。これを行うには、eager-loads でコールバックを使用します。
$ users = User:: where ( " id " , " > " , " 1 " )
-> with ([ ' posts ' => function ( $ q ) { $ q -> remember ( 60 * 60 ); }])
-> remember ( 60 * 60 )
-> take ( 5 )
-> get ();
$rememberFor
プロパティに結果をキャッシュする秒数を設定することで、モデルのすべてのクエリをキャッシュするようにオプトインできます。この機能の仕組みに慣れていない場合、予期しない動作が発生したり、アプリ内のデータが古くなったりする可能性があるため、この機能は注意して使用してください。
パッケージのアーキテクチャに基づいて、単一のクエリのキャッシュを削除することはできません。ただし、キャッシュ タグを使用してクエリにタグを付けた場合は、そのタグのキャッシュをフラッシュできます。
User:: flushCache ( ' user_queries ' );
$rememberCacheTag
プロパティを使用した場合は、パラメーターなしでメソッドを使用でき、 $rememberCacheTag
によって設定されたタグのキャッシュがフラッシュされます。
User:: flushCache ();
特定のクエリのキャッシュを無効にする必要がある場合は、 dontRemember
メソッドを使用できます。
User:: latest ()-> dontRemember ()-> get ();