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 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-load와 함께 콜백을 사용하면 그렇게 할 수 있습니다.
$ 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 ();