Cache 캐시

webman/cachesymfony/cache를 기반으로 개발된 캐시 컴포넌트로, 협작 및 비협작 환경을 모두 지원하며, 연결池을 지원합니다.

주의
현재 매뉴얼은 webman v2 버전입니다. webman v1 버전을 사용 중이라면 v1 버전 매뉴얼을 참조하시기 바랍니다.

설치

composer require -W webman/cache

예제

<?php
namespace app\controller;

use support\Request;
use support\Cache;

class UserController
{
    public function db(Request $request)
    {
        $key = 'test_key';
        Cache::set($key, rand());
        return response(Cache::get($key));
    }
}

구성 파일 위치

구성 파일은 config/cache.php에 위치하며, 없을 경우 수동으로 생성해야 합니다.

구성 파일 내용

<?php
return [
    'default' => 'file',
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache')
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default'
        ],
        'array' => [
            'driver' => 'array'
        ],
        'apcu' => [
            'driver' => 'apcu'
        ]
    ]
];

stores.driver는 4종의 드라이버인 file, redis, array, apcu를 지원합니다.

file 파일 드라이버

이것은 기본 드라이버로, 다른 컴포넌트에 의존하지 않으며, 프로세스 간 캐시 데이터 공유를 지원하지만, 다중 서버 간의 캐시 데이터 공유를 지원하지 않습니다.

array 메모리 드라이버

메모리 저장, 성능이 가장 좋지만 메모리를 차지하며, 프로세스 간 및 서버 간 데이터 공유를 지원하지 않고, 프로세스를 재시작하면 무효가 됩니다. 일반적으로 캐시 데이터 양이 적은 프로젝트에 사용됩니다.

apcu 메모리 드라이버

메모리 저장으로, 성능은 array에 다음이며, 프로세스 간 캐시 데이터 공유를 지원하지만, 다중 서버 간의 공유는 지원하지 않으며, 프로세스 재시작 후 무효가 됩니다. 일반적으로 캐시 데이터 양이 적은 프로젝트에 사용됩니다.

APCu 확장을 설치하고 활성화해야 합니다; 빈번한 캐시 쓰기/삭제 작업에 사용하지 않는 것이 좋으며, 성능 저하를 초래할 수 있습니다.

redis 드라이버

webman/redis 컴포넌트에 의존하며, 프로세스 간 및 서버 간 캐시 데이터 공유를 지원합니다.

stores.redis.connection

stores.redis.connectionconfig/redis.php에서 해당하는 키에 대응합니다. redis를 사용할 경우, webman/redis의 구성(연결 풀 구성 포함)을 재사용합니다.

config/redis.php에 독립적인 구성을 추가하는 것이 좋습니다. 예를 들어 cache는 다음과 같이 설정할 수 있습니다.

<?php
return [
    'default' => [
        'password' => 'abc123',
        'host' => '127.0.0.1',
        'port' => 6379,
        'database' => 0,
    ],
    'cache' => [ // <==== 추가
        'password' => 'abc123',
        'host' => '127.0.0.1',
        'port' => 6379,
        'database' => 1,
        'prefix' => 'webman_cache-',
    ]
];

그 다음 stores.redis.connectioncache로 설정하고, config/cache.php의 최종 구성은 다음과 같이 유사하게 설정합니다.

<?php
return [
    'default' => 'redis', // <==== 
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache')
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'cache' // <====
        ],
        'array' => [
            'driver' => 'array'
        ]
    ]
];

저장소 전환

다음 코드를 통해 수동으로 저장소를 전환하고 다른 저장 드라이버를 사용할 수 있습니다. 예를 들어

Cache::store('redis')->set('key', 'value');
Cache::store('array')->set('key', 'value');


키 이름은 PSR6에서 {}()/\@:중의 어느 하나의 문자를 포함할 수 없도록 제한합니다. 하지만 현재(symfony/cache7.2.4 기준) PHP ini 설정zend.assertions=-1`을 통해 이 검사를 무시할 수 있습니다.

다른 Cache 컴포넌트 사용

ThinkCache 컴포넌트 사용 참고 기타 데이터베이스에서 확인하십시오.