캐싱 드라이버

CodeIgniter는 가장 널리 사용되는 빠르고 동적인 캐싱 방식을 감싸는 래퍼를 제공합니다. 파일 기반 캐싱을 제외한 모든 캐싱은 특정 서버 요구 사항이 필요하며, 서버 요구 사항이 충족되지 않으면 치명적 예외(Fatal Exception)가 발생합니다.

사용 예시

다음 예시는 컨트롤러 내에서의 일반적인 사용 패턴을 보여줍니다.

<?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;

전역 함수 service()를 통해 캐시 엔진의 인스턴스를 직접 가져올 수 있습니다:

<?php

$cache = service('cache');

$foo = $cache->get('foo');

캐시 설정

캐시 엔진에 관한 모든 설정은 app/Config/Cache.php에서 이루어집니다. 해당 파일에서 다음 항목들을 설정할 수 있습니다.

$handler

엔진이 시작될 때 기본 핸들러로 사용할 핸들러의 이름입니다. 사용 가능한 이름은 apcu, dummy, file, memcached, redis, predis, wincache입니다.

$backupHandler

첫 번째 선택인 $handler를 사용할 수 없는 경우, 다음으로 불러올 캐시 핸들러입니다. 파일 시스템은 항상 사용 가능하므로 일반적으로 File 핸들러를 사용하지만, 복잡한 멀티 서버 환경에는 적합하지 않을 수 있습니다.

$prefix

동일한 캐시 저장소를 사용하는 애플리케이션이 두 개 이상인 경우, 모든 키 이름 앞에 붙일 사용자 정의 접두사 문자열을 여기에 추가할 수 있습니다.

$ttl

항목을 저장할 기본 시간(초)으로, 별도로 지정하지 않을 때 사용됩니다.

경고: 이 값은 60초가 하드코딩된 프레임워크 핸들러에서는 사용되지 않지만, 프로젝트와 모듈에서는 유용하게 쓰일 수 있습니다. 향후 릴리즈에서 하드코딩된 값을 대체할 예정입니다.

$file

File 핸들러에 특화된 설정 배열로, 캐시 파일을 어떻게 저장할지 결정합니다.

$memcached

Memcached 핸들러를 사용할 때 이용할 서버의 배열입니다.

$redis

RedisPredis 핸들러를 사용할 때 연결할 Redis 서버의 설정입니다.

커맨드라인 도구

CodeIgniter는 캐시 작업을 도와주는 여러 커맨드를 커맨드라인에서 사용할 수 있도록 제공합니다. 이 도구들은 캐시 드라이버를 사용하는 데 필수는 아니지만 유용하게 활용할 수 있습니다.

cache:clear

현재 시스템 캐시를 지웁니다:

php spark cache:clear

cache:info

현재 시스템의 파일 캐시 정보를 표시합니다:

php spark cache:info

참고

이 명령은 파일 캐시 핸들러만 지원합니다.

클래스 레퍼런스

class CodeIgniter\Cache\CacheInterface
isSupported()
반환:

지원되면 true, 지원되지 않으면 false

반환 형식:

bool

get($key) mixed
매개변수:
  • $key (string) – 캐시 항목 이름

반환:

항목 값 또는 찾을 수 없는 경우 null

반환 형식:

mixed

이 메서드는 캐시 저장소에서 항목을 가져오려고 시도합니다. 항목이 존재하지 않으면 null을 반환합니다.

예시:

<?php

$foo = $cache->get('my_cached_item');
remember(string $key, int $ttl, Closure $callback)
매개변수:
  • $key (string) – 캐시 항목 이름

  • $ttl (int) – 초 단위의 유효 시간(TTL)

  • $callback (Closure) – 캐시 항목이 null을 반환할 때 호출할 콜백

반환:

캐시 항목의 값

반환 형식:

mixed

캐시에서 항목을 가져옵니다. null이 반환된 경우 콜백을 호출하고 결과를 저장합니다. 어느 경우든 값을 반환합니다.

save(string $key, $data[, int $ttl = 60])
매개변수:
  • $key (string) – 캐시 항목 이름

  • $data (mixed) – 저장할 데이터

  • $ttl (int) – 유효 시간(TTL), 초 단위 (기본값 60)

반환:

성공 시 true, 실패 시 false

반환 형식:

bool

이 메서드는 캐시 저장소에 항목을 저장합니다. 저장에 실패하면 false를 반환합니다.

예시:

<?php

$cache->save('cache_item_id', 'data_to_cache');
delete($key) bool
매개변수:
  • $key (string) – 캐시된 항목의 이름

반환:

성공 시 true, 실패 시 false

반환 형식:

bool

이 메서드는 캐시 저장소에서 특정 항목을 삭제합니다. 항목 삭제에 실패하면 false를 반환합니다.

예시:

<?php

$cache->delete('cache_item_id');
deleteMatching($pattern) integer
매개변수:
  • $pattern (string) – 캐시된 항목 키와 매칭할 glob 스타일 패턴

반환:

삭제된 항목 수

반환 형식:

integer

이 메서드는 glob 스타일 패턴과 키를 매칭하여 캐시 저장소에서 여러 항목을 한 번에 삭제합니다. 삭제된 항목의 총 수를 반환합니다.

중요

이 메서드는 File, Redis, Predis 핸들러에 대해서만 구현되어 있습니다. 제한으로 인해 Memcached 및 Wincache 핸들러에는 구현되지 않았습니다.

예시:

<?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
매개변수:
  • $key (string) – 캐시 ID

  • $offset (int) – 추가할 단계/값

반환:

성공 시 새 값, 실패 시 false

반환 형식:

mixed

원시 저장 값을 원자적으로 증가시킵니다.

예시:

<?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
매개변수:
  • $key (string) – 캐시 ID

  • $offset (int) – 감소시킬 단계/값

반환:

성공 시 새 값, 실패 시 false

반환 형식:

mixed

원시 저장 값을 원자적으로 감소시킵니다.

예시:

<?php

// 'iterator' has a value of 6
$cache->decrement('iterator'); // 'iterator' is now 5
$cache->decrement('iterator', 2); // 'iterator' is now 3
clean()
반환:

성공 시 true, 실패 시 false

반환 형식:

bool

이 메서드는 전체 캐시를 ‘정리’합니다. 캐시 파일 삭제에 실패하면 false를 반환합니다.

예시:

<?php

$cache->clean();
getCacheInfo()
반환:

전체 캐시 데이터베이스에 대한 정보

반환 형식:

mixed

이 메서드는 전체 캐시에 대한 정보를 반환합니다.

예시:

<?php

var_dump($cache->getCacheInfo());

참고

반환되는 정보와 데이터 구조는 사용 중인 어댑터에 따라 달라집니다.

getMetadata(string $key)
매개변수:
  • $key (string) – 캐시 항목 이름

반환:

캐시된 항목의 메타데이터입니다. 항목이 없으면 null, 있으면 절대 에포크 만료 시간에 대한 “expire” 키를 최소한 포함하는 배열을 반환합니다 (만료되지 않으면 null).

반환 형식:

array|null

이 메서드는 캐시에서 특정 항목에 대한 자세한 정보를 반환합니다.

예시:

<?php

var_dump($cache->getMetadata('my_cached_item'));

참고

반환되는 정보와 데이터 구조는 사용 중인 어댑터에 따라 달라집니다. 일부 어댑터(File, Memcached, Wincache)는 항목이 없을 때 여전히 false를 반환합니다.

static validateKey(string $key, string $prefix)
매개변수:
  • $key (string) – 잠재적 캐시 키

  • $prefix (string) – 선택적 접두사

반환:

검증되고 접두사가 붙은 키입니다. 키가 드라이버의 최대 키 길이를 초과하면 해시 처리됩니다.

반환 형식:

string

이 메서드는 핸들러 메서드에서 키의 유효성을 검사하는 데 사용됩니다. 비문자열, 유효하지 않은 문자, 빈 길이에 대해 InvalidArgumentException을 발생시킵니다.

예시:

<?php

use CodeIgniter\Cache\Handlers\BaseHandler;

$prefixedKey = BaseHandler::validateKey($key, $prefix);

드라이버

APCu 캐싱

APCu는 PHP용 인메모리 키-값 저장소입니다.

사용하려면 APCu PHP 확장이 필요합니다.

파일 기반 캐싱

이 방식은 애플리케이션이 캐시 디렉터리에 실제로 쓰기 권한을 가져야 합니다.

이 방식은 주의해서 사용하고 애플리케이션의 성능을 벤치마크하십시오. 디스크 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 캐시 모드로 동작할 수 있는 인메모리 키-값 저장소입니다. 사용하려면 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,
        'async'      => false, // specific to Predis and ignored by the native Redis extension
        'persistent' => false,
        'timeout'    => 0,
        'database'   => 0,
    ];

    // ...
}

Redis에 대한 자세한 내용은 https://redis.io를 참조하십시오.

Predis 캐싱

Predis는 Redis 키-값 저장소를 위한 유연하고 기능이 완전한 PHP 클라이언트 라이브러리입니다. 사용하려면 프로젝트 루트에서 커맨드라인을 실행하십시오:

composer require predis/predis

Predis에 대한 자세한 내용은 https://github.com/nrk/predis를 참조하십시오.

더미 캐시

이것은 항상 캐시 미스가 발생하는 캐싱 백엔드입니다. 데이터를 저장하지 않지만, 선택한 캐시를 지원하지 않는 환경에서도 캐싱 코드를 그대로 유지할 수 있게 해줍니다.