캐싱 드라이버
CodeIgniter는 가장 널리 사용되는 빠르고 동적인 캐싱 형태에 대한 래퍼를 제공합니다. 파일 기반 캐싱을 제외한 다른 드라이버는 특정 요구 사항이 필요하며, 요구 사항이 충족되지 않으면 치명적인 예외가 발생합니다.
사용 샘플
다음 예는 컨트롤러내의 일반적인 사용 패턴을 보여줍니다.
<?php
if (! $foo = cache('foo')) {
echo 'Saving to the cache!<br />';
$foo = 'foobarbaz!';
// Save into the cache for 5 minutes
cache()->save('foo', $foo, 300);
}
echo $foo;
Services 클래스를 통해 캐시 엔진 인스턴스를 직접 가져올 수 있습니다.
<?php
$cache = \Config\Services::cache();
$foo = $cache->get('foo');
캐시 구성
캐시 엔진의 모든 구성은 app/Config/Cache.php에서 수행됩니다. 해당 파일에서 다음 항목을 사용할 수 있습니다.
$handler
엔진을 시작할 때 기본 핸들러로 사용해야 하는 핸들러의 이름입니다.
사용 가능한 이름은: dummy
, file
, memcached
, redis
, predis
, wincache
.
$backupHandler
첫 번째 선택 $handler를 사용할 수 없는 경우 다음으로 로드할 캐시 핸들러입니다. 다른 핸들러는 더 복잡한 다중 서버 설정에 맞지 않을 수 있으므로, 일반적으로 항상 사용 가능한 file 핸들러를 지정합니다.
$prefix
동일한 캐시 스토리지를 사용하는 둘 이상의 어플리케이션이 있는 경우 여기에 모든 키 이름 앞에 추가되는 사용자 정의 접두부(prefix) 문자열을 추가할 수 있습니다.
$ttl
항목이 지정되지 않은 경우 항목을 저장하는 기본 시간(초)입니다. WARNING: 60초가 하드 코딩된 프레임워크 핸들러에서는 사용되지 않지만, 프로젝트와 모듈에 유용할 수 있으며, 이렇게 하면 이후 릴리스에서 하드코딩된 값이 대체됩니다.
$file
캐시 파일을 저장 방법을 결정하기 위한 file
핸들러 전용 설정 배열
$memcached
“Memcache(d)” 핸들러의 서버 설정에 사용.
$redis
Redis
와 Predis
핸들러로 사용하고자 하는 Redis 서버 설정.
Command-Line Tools
CodeIgniter는 Cache 작업을 돕기 위해 명령줄에서 사용할 수 있는 몇 가지 명령을 제공됩니다. 이러한 도구는 캐시 드라이버를 사용하는 데 필요하지 않지만 도움이 될 수 있습니다.
cache:clear
시스템 캐시를 지웁니다.
> php spark cache:clear
cache:info
시스템의 파일 캐시 정보 표시
> php spark cache:info
Note
이 명령은 파일 캐시 처리기(handler)만 지원합니다.
Class Reference
- class CodeIgniter\Cache\CacheInterface
- isSupported()
- Returns
지원되는 경우
true
, 지원하지 않는 경우false
- Return type
bool
- get($key) mixed
- Parameters
$key (
string
) – 캐시 아이템 이름
- Returns
항목 값 또는 찾지 못한 경우
null
- Return type
mixed
이 메소드는 캐시 저장소에서 항목을 가져 오려고 시도합니다. 항목이 존재하지 않으면 null을 리턴합니다.
Example
<?php $foo = $cache->get('my_cached_item');
- remember(string $key, int $ttl, Closure $callback)
- Parameters
$key (
string
) – 캐시 아이템 이름$ttl (
int
) – 유효시간, 초$callback (
Closure
) – 캐시 항목이 null을 반환할 때 호출할 콜백
- Returns
캐시 항목의 값
- Return type
mixed
캐시에서 항목을 가져옵니다.
null
이 반환된 경우 콜백을 호출하고 결과를 저장합니다. 어느 쪽이든 값을 반환합니다.
- save(string $key, $data[, int $ttl = 60[, $raw = false]])
- Parameters
$key (
string
) – 캐시 아이템 이름$data (
mixed
) – 저장할 데이터$ttl (
int
) – 유효시간, 초 (기본값 60)$raw (
bool
) – 원시(raw) 값을 저장할지 여부
- Returns
성공하면
true
, 실패하면false
- Return type
bool
항목을 캐시 저장소에 저장합니다. 저장에 실패하면 false를 리턴합니다.
Example
<?php $cache->save('cache_item_id', 'data_to_cache');
Note
$raw
매개 변수는 Memcache의increment()
와decrement()
사용시만 사용됩니다.
- delete($key) bool
- Parameters
$key (
string
) – 캐시된 항목의 이름
- Returns
성공하면
true
, 실패하면false
- Return type
bool
캐시 저장소에서 특정 항목을 삭제합니다. 항목 삭제에 실패하면 false를 리턴합니다.
Example
<?php $cache->delete('cache_item_id');
- deleteMatching($pattern) integer
- Parameters
$pattern (
string
) – 캐시된 항목 키와 일치하는 glob-style 패턴
- Returns
삭제된 항목 수
- Return type
integer
이 메서드는 glob-style 패턴과 키를 일치시켜 캐시 저장소에서 여러 항목을 한 번에 삭제합니다. 삭제된 총 항목 수가 반환됩니다.
Important
이 메소드는 file, Redis, Predis 핸들러에만 구현됩니다. 제한으로 인해 Memcached와 Wincache 핸들러에 구현할 수 없습니다.
Example
<?php $cache->deleteMatching('prefix_*'); // deletes all items of which keys start with "prefix_" $cache->deleteMatching('*_suffix'); // deletes all items of which keys end with "_suffix"
glob 스타일 구문에 대한 자세한 내용은 Glob (programming)을 참조하십시오.
- increment($key[, $offset = 1]) mixed
- Parameters
$key (
string
) – Cache ID$offset (
int
) – 추가할 단계/값
- Returns
성공시 새로운 값, 실패시
false
- Return type
mixed
저장된 값의 증분을 수행합니다.
Example
<?php // 'iterator' has a value of 2 $cache->increment('iterator'); // 'iterator' is now 3 $cache->increment('iterator', 3); // 'iterator' is now 6
- decrement($key[, $offset = 1]) mixed
- Parameters
$key (
string
) – Cache ID$offset (
int
) – 줄일 단계/값
- Returns
성공시 새로운 값, 실패시
false
- Return type
mixed
저장된 값의 감소를 수행합니다.
Example
<?php // 'iterator' has a value of 6 $cache->decrement('iterator'); // 'iterator' is now 5 $cache->decrement('iterator', 2); // 'iterator' is now 3
- clean()
- Returns
성공하면
true
, 실패하면false
- Return type
bool
전체 캐시를 ‘삭제’ 합니다. 캐시 파일 삭제에 실패하면 false를 리턴합니다.
Example
<?php $cache->clean();
- getCacheInfo()
- Returns
전체 캐시 데이터베이스에 대한 정보
- Return type
mixed
전체 캐시에 대한 정보를 리턴합니다.
Example
<?php var_dump($cache->getCacheInfo());
Note
리턴된 정보 및 데이터 구조는 사용중인 어댑터에 따라 다릅니다.
- getMetadata($key)
- Parameters
$key (
string
) – 캐시 아이템 이름
- Returns
캐시된 항목의 메타 데이터, 누락된 항목인 경우
null
, 기간 만료된 항목인 경우expire
키가 있는 배열 (null
인 경우 기간 만료가 아님).- Return type
array|null
캐시의 특정 항목에 대한 자세한 정보를 리턴합니다.
Example
<?php var_dump($cache->getMetadata('my_cached_item'));
Note
리턴된 정보 및 데이터 구조는 사용중인 어댑터에 따라 다릅며, 일부 어댑터(File, Memcached, Wincache)는 누락된 항목에 대해 여전히
false
를 반환합니다.
- static validateKey(string $key, string $prefix)
- Parameters
$key (
string
) – 잠재적 캐시 키$prefix (
string
) – 선택적 접두사
- Returns
확인되고 접두사가 붙은 키입니다. 키가 캐시 드라이버의 최대 키 길이를 초과할 경우 해시(hash)가 됩니다.
- Return type
string
이 메소드는 핸들러 메소드에 유효한 키인지 확인하는 데 사용됩니다. 문자열이 아닌 문자, 잘못된 문자 및 빈 문자열에 대해
InvalidArgumentException
예외가 발생합니다.Example
<?php $prefixedKey = BaseHandler::validateKey($key, $prefix);
Drivers
파일 기반 캐싱
출력 클래스의 캐싱과 달리 드라이버 파일 기반 캐싱을 사용하면 뷰 파일을 캐시할 수 있습니다. 디스크 I/O가 캐슁을 통해 얻는 긍정적인 이점을 없앨 수 있으므로 이를 주의하여 사용하고, 어플리케이션을 벤치마킹해야 합니다. 어플리케이션이 캐시 디렉토리에 실제로 쓰기 가능해야 합니다.
Memcached 캐싱
캐시 구성 파일에 Memcached 서버를 지정할 수 있습니다.
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class Cache extends BaseConfig
{
// ...
public $memcached = [
'host' => '127.0.0.1',
'port' => 11211,
'weight' => 1,
'raw' => false,
];
// ...
}
Memcached에 대한 자세한 내용은 다음을 참조하십시오. https://www.php.net/memcached.
WinCache 캐싱
Windows에서는 WinCache 드라이버를 사용할 수 있습니다.
WinCache에 대한 자세한 내용은 다음을 참조하십시오. https://www.php.net/wincache.
Redis 캐싱
Redis는 LRU 캐시 모드에서 작동할 수 있는 메모리 key-value 저장소입니다. 이를 사용하려면 Redis 서버 및 phpredis PHP 확장이 필요합니다.
캐시 구성 파일에 저장된 redis 서버 연결 구성 옵션입니다.
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class Cache extends BaseConfig
{
// ...
public $redis = [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'timeout' => 0,
'database' => 0,
];
// ...
}
Redis에 대한 자세한 내용은 다음을 참조하십시오. https://redis.io.
Predis 캐싱
Predis는 Redis 키-값 저장소를 위한 유연하고 기능이 완전한 PHP 클라이언트 라이브러리입니다. 이를 사용하려면 프로젝트 루트 내의 명령줄에서 다음을 수행합니다.
> composer require predis/predis
Redis에 대한 자세한 내용은 https://github.com/nrk/predis을 참조하시기 바랍니다.
Dummy 캐시
이것은 항상 ‘miss’되는 캐싱 백엔드입니다. 데이터를 저장하지 않지만 캐시를 지원하지 않는 환경에서 캐싱 코드를 유지할 수 있습니다.