문서 메뉴
문서 홈
/ / /
Laravel MongoDB

캐시 및 잠금

Laravel 캐시 및 잠금 의 백엔드로 MongoDB를 사용하려면 에 드라이버를 지정하여 저장소 구성을 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() 메서드를 호출하는 마이그레이션을 통해 인덱스를 생성합니다.

<?php
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
],
],

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 MongoDB는 정수 및 부동 소수점 값을 사용한 증가 및 감소를 지원합니다.

캐시 사용에 대한 자세한 내용은 Laravel 캐시 설명서를 참조하세요.

기본적으로 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);

다음 예제에서는 기본 저장소를 사용하여 캐시 관리자의 자동 삽입을 사용하는 방법을 보여 줍니다. 이 예제에서는 호출될 때마다 카운터를 증가시키는 컨트롤러를 생성합니다.

<?php
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');
}
}

원자 락을 사용하면 경쟁 조건에 대한 걱정 없이 분산된 락을 조작할 수 있습니다. 다음 예제에서는 원자 잠금을 구현합니다.

use Illuminate\Support\Facades\Cache;
$lock = Cache::store('mongodb')->lock('foo', 10);
if ($lock->get()) {
// Lock acquired for 10 seconds...
$lock->release();
}

잠금 사용에 대한 자세한 내용은 Laravel 잠금 문서를 참조하세요.

돌아가기

사용자 인증

다음