Cache 캐시
webman/cache는 symfony/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.connection
은 config/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.connection
을 cache
로 설정하고, 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 컴포넌트 사용 참고 기타 데이터베이스에서 확인하십시오.