Laravel Octane
소개
Laravel Octane은 FrankenPHP, Open Swoole, Swoole 및 RoadRunner를 포함한 고성능 애플리케이션 서버를 사용하여 애플리케이션을 제공함으로써 애플리케이션 성능을 크게 향상시킵니다. Octane은 애플리케이션을 한 번 부팅하고 메모리에 유지한 다음 초고속으로 요청을 처리합니다.
설치
Octane은 Composer 패키지 관리자를 통해 설치할 수 있습니다.
composer require laravel/octane
Octane을 설치한 후 octane:install Artisan 명령을 실행하면 Octane의 구성 파일이 애플리케이션에 설치됩니다.
php artisan octane:install
서버 사전 요구 사항
Laravel Octane은 PHP 8.1+ 이상을 요구합니다.
FrankenPHP
FrankenPHP는 Go로 작성된 PHP 애플리케이션 서버로, 얼리 힌트, Brotli 및 Zstandard 압축과 같은 최신 웹 기능을 지원합니다. Octane을 설치하고 서버로 FrankenPHP를 선택하면 Octane이 자동으로 FrankenPHP 바이너리를 다운로드하여 설치합니다.
Laravel Sail을 통한 FrankenPHP
Laravel Sail을 사용하여 애플리케이션을 개발할 계획이라면 다음 명령어를 실행하여 Octane 및 FrankenPHP를 설치해야 합니다.
./vendor/bin/sail up./vendor/bin/sail composer require laravel/octane
다음으로, octane:install Artisan 명령어를 사용하여 FrankenPHP 바이너리를 설치해야 합니다.
./vendor/bin/sail artisan octane:install --server=frankenphp
마지막으로, 애플리케이션의 docker-compose.yml 파일에서 laravel.test 서비스 정의에 SUPERVISOR_PHP_COMMAND 환경 변수를 추가합니다. 이 환경 변수에는 PHP 개발 서버 대신 Octane을 사용하여 애플리케이션을 제공하기 위해 Sail이 사용할 명령어가 포함됩니다.
services: laravel.test: environment: SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=frankenphp --host=0.0.0.0 --admin-port=2019 --port='${APP_PORT:-80}'" # [tl! add] XDG_CONFIG_HOME: /var/www/html/config # [tl! add] XDG_DATA_HOME: /var/www/html/data # [tl! add]
HTTPS, HTTP/2 및 HTTP/3을 활성화하려면 대신 다음 수정 사항을 적용하십시오.
services: laravel.test: ports: - '${APP_PORT:-80}:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' - '443:443' # [tl! add] - '443:443/udp' # [tl! add] environment: SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --host=localhost --port=443 --admin-port=2019 --https" # [tl! add] XDG_CONFIG_HOME: /var/www/html/config # [tl! add] XDG_DATA_HOME: /var/www/html/data # [tl! add]
일반적으로 https://localhost를 통해 FrankenPHP Sail 애플리케이션에 접근해야 합니다. https://127.0.0.1을 사용하는 경우 추가 구성이 필요하며 권장되지 않습니다.
Docker를 통한 FrankenPHP
FrankenPHP의 공식 Docker 이미지를 사용하면 성능이 향상되고 FrankenPHP의 정적 설치에 포함되지 않은 추가 확장 기능을 사용할 수 있습니다. 또한 공식 Docker 이미지는 Windows와 같이 기본적으로 지원하지 않는 플랫폼에서 FrankenPHP를 실행하는 기능을 제공합니다. FrankenPHP의 공식 Docker 이미지는 로컬 개발 및 프로덕션 용도 모두에 적합합니다.
다음 Dockerfile을 FrankenPHP 기반 Laravel 애플리케이션을 컨테이너화하기 위한 시작점으로 사용할 수 있습니다.
FROM dunglas/frankenphpRUN install-php-extensions \ pcntl # 여기에 다른 PHP 확장 기능 추가...COPY . /appENTRYPOINT ["php", "artisan", "octane:frankenphp"]
그런 다음 개발 중에 다음 Docker Compose 파일을 활용하여 애플리케이션을 실행할 수 있습니다.
# compose.yamlservices: frankenphp: build: context: . entrypoint: php artisan octane:frankenphp --workers=1 --max-requests=1 ports: - "8000:8000" volumes: - .:/app
--log-level 옵션이 php artisan octane:start 명령어에 명시적으로 전달되면, Octane은 FrankenPHP의 네이티브 로거를 사용하고, 별도로 구성하지 않는 한 구조화된 JSON 로그를 생성합니다.
Docker를 사용하여 FrankenPHP를 실행하는 방법에 대한 자세한 내용은 공식 FrankenPHP 문서를 참조하십시오.
RoadRunner
RoadRunner는 Go를 사용하여 빌드된 RoadRunner 바이너리에 의해 구동됩니다. RoadRunner 기반 Octane 서버를 처음 시작하면 Octane에서 RoadRunner 바이너리를 다운로드하여 설치할 것인지 묻습니다.
Laravel Sail을 통한 RoadRunner
Laravel Sail을 사용하여 애플리케이션을 개발할 계획이라면, 다음 명령어를 실행하여 Octane과 RoadRunner를 설치해야 합니다:
./vendor/bin/sail up./vendor/bin/sail composer require laravel/octane spiral/roadrunner-cli spiral/roadrunner-http
다음으로, Sail 쉘을 시작하고 rr 실행 파일을 사용하여 최신 Linux 기반 RoadRunner 바이너리 빌드를 가져와야 합니다:
./vendor/bin/sail shell# Sail 쉘 내부에서..../vendor/bin/rr get-binary
그런 다음, 애플리케이션의 docker-compose.yml 파일에서 laravel.test 서비스 정의에 SUPERVISOR_PHP_COMMAND 환경 변수를 추가하십시오. 이 환경 변수에는 Sail이 PHP 개발 서버 대신 Octane을 사용하여 애플리케이션을 서비스하는 데 사용할 명령어가 포함됩니다:
services: laravel.test: environment: SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=roadrunner --host=0.0.0.0 --rpc-port=6001 --port='${APP_PORT:-80}'" # [tl! add]
마지막으로, rr 바이너리가 실행 가능하도록 설정하고 Sail 이미지를 빌드하십시오:
chmod +x ./rr./vendor/bin/sail build --no-cache
Swoole
Laravel Octane 애플리케이션을 제공하기 위해 Swoole 애플리케이션 서버를 사용하려면 Swoole PHP 확장 프로그램을 설치해야 합니다. 일반적으로 이는 PECL을 통해 수행할 수 있습니다:
pecl install swoole
Open Swoole
Laravel Octane 애플리케이션을 제공하기 위해 Open Swoole 애플리케이션 서버를 사용하려면 Open Swoole PHP 확장 프로그램을 설치해야 합니다. 일반적으로 이는 PECL을 통해 수행할 수 있습니다:
pecl install openswoole
Open Swoole과 함께 Laravel Octane을 사용하면 동시 작업, 틱 및 간격과 같은 Swoole에서 제공하는 것과 동일한 기능을 사용할 수 있습니다.
Laravel Sail을 통한 Swoole
Sail을 통해 Octane 애플리케이션을 제공하기 전에 Laravel Sail의 최신 버전이 있는지 확인하고 애플리케이션의 루트 디렉토리 내에서 ./vendor/bin/sail build --no-cache를 실행하세요.
또는 Laravel의 공식 Docker 기반 개발 환경인 Laravel Sail을 사용하여 Swoole 기반 Octane 애플리케이션을 개발할 수 있습니다. Laravel Sail은 기본적으로 Swoole 확장 프로그램을 포함합니다. 그러나 Sail에서 사용하는 docker-compose.yml 파일을 조정해야 합니다.
시작하려면 애플리케이션의 docker-compose.yml 파일에서 laravel.test 서비스 정의에 SUPERVISOR_PHP_COMMAND 환경 변수를 추가하세요. 이 환경 변수는 Sail이 PHP 개발 서버 대신 Octane을 사용하여 애플리케이션을 제공하는 데 사용할 명령을 포함합니다:
services: laravel.test: environment: SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port='${APP_PORT:-80}'" # [tl! add]
마지막으로, Sail 이미지를 빌드하세요:
./vendor/bin/sail build --no-cache
Swoole 구성
Swoole는 필요한 경우 octane 구성 파일에 추가할 수 있는 몇 가지 추가 구성 옵션을 지원합니다. 이러한 옵션은 거의 수정할 필요가 없기 때문에 기본 구성 파일에 포함되어 있지 않습니다.
'swoole' => [ 'options' => [ 'log_file' => storage_path('logs/swoole_http.log'), 'package_max_length' => 10 * 1024 * 1024, ],],
애플리케이션 서비스 제공
Octane 서버는 octane:start Artisan 명령을 통해 시작할 수 있습니다. 기본적으로 이 명령은 애플리케이션의 octane 구성 파일의 server 구성 옵션에 지정된 서버를 사용합니다.
php artisan octane:start
기본적으로 Octane은 8000번 포트에서 서버를 시작하므로 웹 브라우저에서 http://localhost:8000을 통해 애플리케이션에 액세스할 수 있습니다.
HTTPS를 통한 애플리케이션 서비스 제공
기본적으로 Octane을 통해 실행되는 애플리케이션은 http:// 접두사가 붙은 링크를 생성합니다. 애플리케이션의 config/octane.php 구성 파일 내에서 사용되는 OCTANE_HTTPS 환경 변수는 HTTPS를 통해 애플리케이션을 서비스할 때 true로 설정할 수 있습니다. 이 구성 값이 true로 설정되면 Octane은 Laravel에게 생성된 모든 링크에 https:// 접두사를 붙이도록 지시합니다.
'https' => env('OCTANE_HTTPS', false),
Nginx를 통해 애플리케이션 제공하기
자체 서버 구성을 관리할 준비가 되지 않았거나 강력한 Laravel Octane 애플리케이션을 실행하는 데 필요한 다양한 서비스를 구성하는 데 익숙하지 않다면 Laravel Forge를 확인해 보세요.
프로덕션 환경에서는 Nginx 또는 Apache와 같은 기존 웹 서버 뒤에서 Octane 애플리케이션을 제공해야 합니다. 이렇게 하면 웹 서버가 이미지 및 스타일시트와 같은 정적 자산을 제공하고 SSL 인증서 종료를 관리할 수 있습니다.
아래의 Nginx 구성 예시에서 Nginx는 사이트의 정적 자산을 제공하고 8000 포트에서 실행 중인 Octane 서버에 요청을 프록시합니다.
map $http_upgrade $connection_upgrade { default upgrade; '' close;}server { listen 80; listen [::]:80; server_name domain.com; server_tokens off; root /home/forge/domain.com/public; index index.php; charset utf-8; location /index.php { try_files /not_exists @octane; } location / { try_files $uri $uri/ @octane; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/domain.com-error.log error; error_page 404 /index.php; location @octane { set $suffix ""; if ($uri = /index.php) { set $suffix ?$query_string; } proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header Scheme $scheme; proxy_set_header SERVER_PORT $server_port; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_pass http://127.0.0.1:8000$suffix; }}
파일 변경 감시
Octane 서버가 시작될 때 애플리케이션이 메모리에 한 번 로드되므로, 브라우저를 새로 고칠 때 애플리케이션 파일에 대한 변경 사항이 반영되지 않습니다. 예를 들어 routes/web.php 파일에 추가된 라우트 정의는 서버를 다시 시작해야 반영됩니다. 편의를 위해 --watch 플래그를 사용하여 애플리케이션 내에서 파일 변경이 있을 때마다 Octane이 자동으로 서버를 다시 시작하도록 지시할 수 있습니다.
php artisan octane:start --watch
이 기능을 사용하기 전에 로컬 개발 환경에 Node가 설치되어 있는지 확인해야 합니다. 또한 프로젝트 내에 Chokidar 파일 감시 라이브러리를 설치해야 합니다.
npm install --save-dev chokidar
애플리케이션의 config/octane.php 구성 파일 내에서 watch 구성 옵션을 사용하여 감시해야 하는 디렉터리 및 파일을 구성할 수 있습니다.
작업자 수 지정
기본적으로 Octane은 시스템에서 제공하는 각 CPU 코어에 대해 하나의 애플리케이션 요청 작업자를 시작합니다. 이러한 작업자는 애플리케이션에 들어오는 HTTP 요청을 처리하는 데 사용됩니다. octane:start 명령을 호출할 때 --workers 옵션을 사용하여 시작할 작업자 수를 수동으로 지정할 수 있습니다.
php artisan octane:start --workers=4
Swoole 애플리케이션 서버를 사용하는 경우 시작하려는 "태스크 작업자" 수도 지정할 수 있습니다.
php artisan octane:start --workers=4 --task-workers=6
최대 요청 수 지정
메모리 누수를 방지하기 위해 Octane은 500개의 요청을 처리한 작업자를 정상적으로 재시작합니다. 이 숫자를 조정하려면 --max-requests 옵션을 사용할 수 있습니다.
php artisan octane:start --max-requests=250
작업자 다시 로드
octane:reload 명령을 사용하여 Octane 서버의 애플리케이션 작업자를 정상적으로 재시작할 수 있습니다. 일반적으로 배포 후 새로 배포된 코드가 메모리에 로드되고 후속 요청을 처리하는 데 사용되도록 하기 위해 수행해야 합니다.
php artisan octane:reload
서버 중지
octane:stop Artisan 명령을 사용하여 Octane 서버를 중지할 수 있습니다.
php artisan octane:stop
서버 상태 확인
octane:status Artisan 명령어를 사용하여 Octane 서버의 현재 상태를 확인할 수 있습니다:
php artisan octane:status
의존성 주입 및 Octane
Octane은 애플리케이션을 한 번 부팅하고 요청을 처리하는 동안 메모리에 유지하므로 애플리케이션을 빌드하는 동안 고려해야 할 몇 가지 주의 사항이 있습니다. 예를 들어, 애플리케이션 서비스 공급자의 register 및 boot 메서드는 요청 작업자가 처음 부팅될 때 한 번만 실행됩니다. 후속 요청에서는 동일한 애플리케이션 인스턴스가 재사용됩니다.
이를 감안할 때 애플리케이션 서비스 컨테이너 또는 요청을 객체의 생성자에 주입할 때 특별한 주의를 기울여야 합니다. 그렇게 하면 해당 객체는 후속 요청에서 컨테이너 또는 요청의 오래된 버전을 가질 수 있습니다.
Octane은 요청 간에 모든 타사 프레임워크 상태를 자동으로 재설정합니다. 그러나 Octane은 애플리케이션에서 생성한 전역 상태를 재설정하는 방법을 항상 알 수 있는 것은 아닙니다. 따라서 Octane 친화적인 방식으로 애플리케이션을 빌드하는 방법을 알고 있어야 합니다. 아래에서는 Octane을 사용하는 동안 문제를 일으킬 수 있는 가장 일반적인 상황에 대해 논의합니다.
컨테이너 주입
일반적으로 애플리케이션 서비스 컨테이너 또는 HTTP 요청 인스턴스를 다른 객체의 생성자에 주입하는 것을 피해야 합니다. 예를 들어 다음 바인딩은 전체 애플리케이션 서비스 컨테이너를 싱글톤으로 바인딩된 객체에 주입합니다:
use App\Service;use Illuminate\Contracts\Foundation\Application;/** * 애플리케이션 서비스 등록. */public function register(): void{ $this->app->singleton(Service::class, function (Application $app) { return new Service($app); });}
이 예제에서 애플리케이션 부트 프로세스 중에 Service 인스턴스가 해결되면 컨테이너가 서비스에 주입되고 이후 요청에서 동일한 컨테이너가 Service 인스턴스에 의해 유지됩니다. 이것이 특정 애플리케이션에 문제가 되지 않을 수도 있지만, 부트 사이클 후반이나 후속 요청에 의해 추가된 바인딩이 컨테이너에 예기치 않게 누락될 수 있습니다.
해결 방법으로, 바인딩을 싱글톤으로 등록하는 것을 중단하거나, 항상 현재 컨테이너 인스턴스를 해결하는 컨테이너 리졸버 클로저를 서비스에 주입할 수 있습니다.
use App\Service;use Illuminate\Container\Container;use Illuminate\Contracts\Foundation\Application;$this->app->bind(Service::class, function (Application $app) { return new Service($app);});$this->app->singleton(Service::class, function () { return new Service(fn () => Container::getInstance());});
전역 app 헬퍼와 Container::getInstance() 메서드는 항상 애플리케이션 컨테이너의 최신 버전을 반환합니다.
요청 주입
일반적으로, 애플리케이션 서비스 컨테이너 또는 HTTP 요청 인스턴스를 다른 객체의 생성자에 주입하는 것을 피해야 합니다. 예를 들어, 다음 바인딩은 전체 요청 인스턴스를 싱글톤으로 바인딩된 객체에 주입합니다.
use App\Service;use Illuminate\Contracts\Foundation\Application;/** * Register any application services. */public function register(): void{ $this->app->singleton(Service::class, function (Application $app) { return new Service($app['request']); });}
이 예제에서 Service 인스턴스가 애플리케이션 부트 프로세스 중에 확인되면 HTTP 요청이 서비스에 주입되고 해당 요청이 후속 요청에서 Service 인스턴스에 의해 유지됩니다. 따라서 모든 헤더, 입력 및 쿼리 문자열 데이터와 기타 모든 요청 데이터가 잘못됩니다.
해결 방법으로 바인딩을 싱글톤으로 등록하는 것을 중단하거나, 항상 현재 요청 인스턴스를 확인하는 요청 확인 클로저를 서비스에 주입할 수 있습니다. 또는 가장 권장되는 방법은 단순히 객체에 필요한 특정 요청 정보를 런타임에 객체의 메서드 중 하나에 전달하는 것입니다.
use App\Service;use Illuminate\Contracts\Foundation\Application;$this->app->bind(Service::class, function (Application $app) { return new Service($app['request']);});$this->app->singleton(Service::class, function (Application $app) { return new Service(fn () => $app['request']);});// Or...$service->method($request->input('name'));
전역 request 헬퍼는 애플리케이션이 현재 처리 중인 요청을 항상 반환하므로 애플리케이션 내에서 안전하게 사용할 수 있습니다.
컨트롤러 메서드와 라우트 클로저에서 Illuminate\Http\Request 인스턴스를 타입 힌트하는 것은 허용됩니다.
구성 리포지토리 주입
일반적으로 다른 객체의 생성자에 구성 리포지토리 인스턴스를 주입하는 것을 피해야 합니다. 예를 들어 다음 바인딩은 싱글톤으로 바인딩된 객체에 구성 리포지토리를 주입합니다.
use App\Service;use Illuminate\Contracts\Foundation\Application;/** * Register any application services. */public function register(): void{ $this->app->singleton(Service::class, function (Application $app) { return new Service($app->make('config')); });}
이 예제에서, 만약 요청 사이에 구성 값이 변경된다면, 해당 서비스는 원래 저장소 인스턴스에 의존하고 있기 때문에 새로운 값에 접근할 수 없습니다.
이를 해결하기 위해, 바인딩을 싱글톤으로 등록하는 것을 중단하거나, 구성 저장소 리졸버 클로저를 클래스에 주입할 수 있습니다.
use App\Service;use Illuminate\Container\Container;use Illuminate\Contracts\Foundation\Application;$this->app->bind(Service::class, function (Application $app) { return new Service($app->make('config'));});$this->app->singleton(Service::class, function () { return new Service(fn () => Container::getInstance()->make('config'));});
전역 config는 항상 구성 저장소의 최신 버전을 반환하므로 애플리케이션 내에서 안전하게 사용할 수 있습니다.
메모리 누수 관리
Octane은 요청 사이에 애플리케이션을 메모리에 유지한다는 점을 기억하십시오. 따라서 정적으로 유지되는 배열에 데이터를 추가하면 메모리 누수가 발생합니다. 예를 들어, 다음 컨트롤러는 애플리케이션에 대한 각 요청이 계속해서 정적 $data 배열에 데이터를 추가하므로 메모리 누수가 있습니다.
use App\Service;use Illuminate\Http\Request;use Illuminate\Support\Str;/** * Handle an incoming request. */public function index(Request $request): array{ Service::$data[] = Str::random(10); return [ // ... ];}
애플리케이션을 빌드하는 동안 이러한 유형의 메모리 누수를 만들지 않도록 특별히 주의해야 합니다. 애플리케이션에 새로운 메모리 누수를 도입하지 않도록 로컬 개발 중에 애플리케이션의 메모리 사용량을 모니터링하는 것이 좋습니다.
동시 작업
이 기능은 Swoole이 필요합니다.
Swoole을 사용하는 경우 경량 백그라운드 작업을 통해 작업을 동시에 실행할 수 있습니다. Octane의 concurrently 메서드를 사용하여 이를 수행할 수 있습니다. 이 메서드를 PHP 배열 구조 분해와 결합하여 각 작업의 결과를 검색할 수 있습니다.
use App\Models\User;use App\Models\Server;use Laravel\Octane\Facades\Octane;[$users, $servers] = Octane::concurrently([ fn () => User::all(), fn () => Server::all(),]);
Octane에서 처리하는 동시 작업은 Swoole의 "작업 워커"를 활용하며, 들어오는 요청과는 완전히 다른 프로세스 내에서 실행됩니다. 동시 작업을 처리하는 데 사용할 수 있는 워커의 양은 octane:start 명령의 --task-workers 지시어에 의해 결정됩니다.
php artisan octane:start --workers=4 --task-workers=6
concurrently 메서드를 호출할 때 Swoole의 작업 시스템 제한으로 인해 1024개 이상의 작업을 제공하면 안 됩니다.
틱과 간격
이 기능은 Swoole가 필요합니다.
Swoole을 사용할 때 지정된 초 간격으로 실행되는 "틱" 작업을 등록할 수 있습니다. tick 메서드를 통해 "틱" 콜백을 등록할 수 있습니다. tick 메서드에 제공되는 첫 번째 인수는 티커 이름을 나타내는 문자열이어야 합니다. 두 번째 인수는 지정된 간격으로 호출될 수 있는 콜백이어야 합니다.
이 예에서는 10초마다 호출되는 클로저를 등록합니다. 일반적으로 tick 메서드는 애플리케이션 서비스 제공업체 중 하나의 boot 메서드 내에서 호출해야 합니다.
Octane::tick('simple-ticker', fn () => ray('Ticking...')) ->seconds(10);
immediate 메서드를 사용하면 Octane 서버가 처음 부팅될 때 즉시 틱 콜백을 호출하고 이후 N초마다 호출하도록 Octane에 지시할 수 있습니다.
Octane::tick('simple-ticker', fn () => ray('Ticking...')) ->seconds(10) ->immediate();
Octane 캐시
이 기능은 Swoole가 필요합니다.
Swoole을 사용할 때 초당 최대 200만 건의 작업 읽기 및 쓰기 속도를 제공하는 Octane 캐시 드라이버를 활용할 수 있습니다. 따라서 이 캐시 드라이버는 캐싱 계층에서 극도의 읽기/쓰기 속도가 필요한 애플리케이션에 탁월한 선택입니다.
이 캐시 드라이버는 Swoole 테이블에서 제공합니다. 캐시에 저장된 모든 데이터는 서버의 모든 워커에서 사용할 수 있습니다. 그러나 서버가 다시 시작되면 캐시된 데이터가 플러시됩니다.
Cache::store('octane')->put('framework', 'Laravel', 30);
Octane 캐시에서 허용되는 최대 항목 수는 애플리케이션의 octane 구성 파일에서 정의할 수 있습니다.
캐시 간격
Laravel의 캐시 시스템에서 제공하는 일반적인 메서드 외에도 Octane 캐시 드라이버는 간격 기반 캐시 기능을 제공합니다. 이러한 캐시는 지정된 간격으로 자동으로 새로 고쳐지며 애플리케이션 서비스 제공업체 중 하나의 boot 메서드 내에 등록해야 합니다. 예를 들어 다음 캐시는 5초마다 새로 고쳐집니다.
use Illuminate\Support\Str;Cache::store('octane')->interval('random', function () { return Str::random(10);}, seconds: 5);
테이블
이 기능을 사용하려면 Swoole이 필요합니다.
Swoole을 사용하는 경우 임의의 Swoole 테이블을 정의하고 상호 작용할 수 있습니다. Swoole 테이블은 매우 뛰어난 성능 처리량을 제공하며 이러한 테이블의 데이터는 서버의 모든 작업자가 액세스할 수 있습니다. 그러나 서버를 다시 시작하면 데이터가 손실됩니다.
테이블은 애플리케이션의 octane 구성 파일의 tables 구성 배열 내에 정의해야 합니다. 최대 1000개의 행을 허용하는 예제 테이블이 이미 구성되어 있습니다. 문자열 열의 최대 크기는 아래와 같이 열 유형 뒤에 열 크기를 지정하여 구성할 수 있습니다.
'tables' => [ 'example:1000' => [ 'name' => 'string:1000', 'votes' => 'int', ],],
테이블에 액세스하려면 Octane::table 메서드를 사용하면 됩니다.
use Laravel\Octane\Facades\Octane;Octane::table('example')->set('uuid', [ 'name' => 'Nuno Maduro', 'votes' => 1000,]);return Octane::table('example')->get('uuid');
Swoole 테이블에서 지원하는 열 유형은 string, int, float입니다.