캐시 및 잠금
구성
MongoDB 를 Laravel 캐시 및 의 백엔드 로 사용하려면 에 운전자 를 지정하여 저장 구성을 mongodb
config/cache.php
추가합니다.
'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', 'collection' => 'cache', 'lock_connection' => 'mongodb', 'lock_collection' => 'cache_locks', 'lock_lottery' => [2, 100], 'lock_timeout' => 86400, ], ],
mongodb
데이터베이스 연결을 구성하려면 연결 섹션을 참조하세요.
다음 표에서는 캐시 및 잠금 옵션 목록과 해당 기본값에 대해 설명합니다.
설정 | 설명 |
---|---|
driver | 필수. 사용할 잠금 드라이버를 지정합니다. mongodb 이어야 합니다. |
connection | 필수. 캐시 항목을 저장하는 데 사용되는 데이터베이스 연결입니다. mongodb 연결이어야 합니다. |
collection | 기본값 cache . 캐시 항목을 저장할 MongoDB 컬렉션의 이름입니다. |
lock_connection | 기본값은 캐시 connection 입니다. 잠금을 저장하는 데 사용되는 데이터베이스 연결입니다. mongodb 연결이어야 합니다. |
lock_collection | 기본값 cache_locks . 잠금을 저장할 MongoDB 컬렉션의 이름입니다. |
lock_lottery | 기본값 [2, 100] . 만료된 캐시 항목 정리의 확률 [chance, total] 입니다. 비활성화하려면 [0, 0] 로 설정합니다. |
lock_timeout | 기본값 86400 . 잠금의 수명(초)입니다. |
자동 만료 인덱스 설정
MongoDB에 통합된 TTL 인덱스 는 문서가 만료되면 자동으로 삭제합니다. mongodb
드라이버에서는 선택 사항이지만 권장됩니다. 인덱스는 애플리케이션이 이 작업을 수행하도록 요구하는 대신 만료된 문서의 삭제를 MongoDB에 위임하여 더 나은 성능을 제공합니다.
캐시와 잠금 저장소 모두에서 제공하는 createTTLIndex()
메서드를 호출하는 마이그레이션을 통해 인덱스를 생성합니다.
use Illuminate\Database\Migrations\Migration; use Illuminate\Support\Facades\Cache; return new class extends Migration { public function up(): void { $store = Cache::store('mongodb'); $store->createTTLIndex(); $store->lock('')->createTTLIndex(); } };
그런 다음 마이그레이션을 실행합니다.
php artisan migrate
또는 MongoDB Shell (mongosh
)을 사용하여 인덱스를 만들 수 있습니다.
db.cache.createIndex( /* Field that holds the expiration date */ { expires_at: 1 }, /* Delay to remove items after expiration */ { expireAfterSeconds: 0 } )
잠금을 사용하는 경우 확률을 0
로 설정하여 lock_lottery
를 비활성화합니다.
'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', 'lock_lottery' => [0, 100], // Disabled ], ],
MongoDB 캐시 사용
Laravel 캐시는 파사드 Illuminate\Support\Facades\Cache
를 사용하여 직렬화 가능한 데이터를 저장하는 데 사용할 수 있습니다.
이 예에서는 다음 조치를 수행합니다.
mongodb
저장소가 있는 캐시 리포지토리를 가져옵니다.다음 이름의 캐시 항목을 읽고 반환하려고 시도합니다.
foo
누락된 경우 클로저를 호출하여 값을 계산하고 값을 영구적으로 저장한 다음 반환합니다.
use Illuminate\Support\Facades\Cache; $value = Cache::store('mongodb')->get('foo', function () { return [1, 2, 3]; });
기본적으로 캐시된 객체는 만료되지 않습니다. 그러나 다음 예와 같이 만료 시간을 정의할 수 있습니다.
Cache::store('mongodb')->set('foo', 'abc', '1 day');
값이 이전에 초기화된 경우 값 증가 및 감소도 지원됩니다. 다음 예에서는 카운터를 3
으로 초기화하고, 5 을 추가하고, 2 를 제거합니다.
Cache::store('mongodb')->set('counter', 3); Cache::store('mongodb')->increment('counter', 5); Cache::store('mongodb')->decrement('counter', 2);
참고
Laravel 통합은 정수 및 부동 소수점 값을 사용한 증가 및 감소를 지원합니다.
캐시 사용에 대한 자세한 내용은 Laravel 캐시 설명서를 참조하세요.
MongoDB를 기본 캐시로 구성
기본적으로 mongodb
저장소를 사용하려면 config/cache.php
에서 기본 저장소를 변경합니다.
return [ 'default' => env('CACHE_STORE', 'mongodb'), 'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', ], ], ];
참고
이전 예제에서는 선택적 매개변수를 의도적으로 모두 생략했으므로 기본값이 적용됩니다.
CACHE_STORE
변수는 사용자 환경 또는 .env
파일에서 설정할 수 있습니다. 다음과 같이 업데이트하거나 제거합니다.
CACHE_STORE=mongodb
그런 다음 Illuminate\Support\Facades\Cache
파사드 및 자동 삽입을 사용할 수 있습니다.
use Illuminate\Support\Facades\Cache; Cache::get('foo', 5);
다음 예제에서는 기본 저장소를 사용하여 캐시 관리자의 자동 삽입을 사용하는 방법을 보여 줍니다. 이 예제에서는 호출될 때마다 카운터를 증가시키는 컨트롤러를 생성합니다.
namespace App\Http\Controllers; use App\Contracts\CacheManager; class CountController extends Controller { public function __construct( private CacheManager $cache, ) {} public function hit(): int { return $this->cache->increment('counter'); } }
MongoDB 잠금 사용
원자 락을 사용하면 경쟁 조건에 대한 걱정 없이 분산된 락을 조작할 수 있습니다. 다음 예제에서는 원자 잠금을 구현합니다.
use Illuminate\Support\Facades\Cache; $lock = Cache::store('mongodb')->lock('foo', 10); if ($lock->get()) { // Lock acquired for 10 seconds... $lock->release(); }
잠금 사용에 대한 자세한 내용은 Laravel 잠금 문서를 참조하세요.