V9은 이전 버전과 상대적으로 호환되지 않으므로 원활한 마이그레이션을 위해 마이그레이션 가이드를 주의 깊게 읽어보시기 바랍니다. 가장 큰 변화 중 하나는 당시 구현했던 기본 배열을 대체하는 객체인 구성 시스템입니다. 또한 V9가 제대로 작동하려면 최소한 PHP 8 이상이 필요합니다.
Wiki의 추가 정보 추상화의 단순성: 많은 백엔드 캐시를 위한 하나의 클래스. 코드를 여러 번 다시 작성할 필요가 없습니다.
새로운 끌어오기 요청(Pull Request) 을 통해 자유롭게 드라이버를 제안해 주세요. 환영합니다!
일반 운전자 | 고성능 드라이버 | 개발 동인 (핵심) | 클러스터 집계 드라이버 (코어) |
---|---|---|---|
Apcu (코어)(APC 지원 제거됨) | Arangodb (확장) | Devnull | FullReplicationCluster |
Dynamodb (확장) | Cassandra (PHP 확장은 더 이상 Datastax에서 유지 관리되지 않으며 v10에서는 더 이상 사용되지 않을 수 있습니다) | Devrandom | SemiReplicationCluster |
Files (코어) | CouchBasev3 (코어)(v10부터 더 이상 사용되지 않음) | Memory (이전 이름은 Memstatic ) | MasterSlaveReplicationCluster |
Firestore (확장 프로그램) | CouchBasev4 (확장) | RandomReplicationCluster | |
Leveldb (코어) | Couchdb (확장) | ||
Memcache(d) (코어) | Mongodb (확장) | ||
Solr (확장) | Predis (코어) | ||
Sqlite (코어) | Ravendb _(확장) | ||
Wincache (코어)(v9.2부터 더 이상 사용되지 않으며 v10부터 제거됩니다) | Relay (2024년말) | ||
Zend Disk Cache (코어) | Redis / RedisCluster (코어) | ||
Ssdb (코어) | |||
Zend Memory Cache (코어) |
* DOCS/DRIVERS.md에서 드라이버 설명을 볼 수 있습니다.
v9.2부터 새로운 Couchbase 확장이 출시되었습니다: Couchbasev4 또한 새로운 드라이버 확장이 추가되었습니다: Ravendb
. 드라이버는 보다 세부적인 구성을 허용하기 위해 해당 기능을 적극적으로 개발할 예정입니다. 이 새로운 확장은 다른 것들과 함께 Phpfastcache의 새로운 시대의 시작입니다 :
Arangodb
, Couchdb
, Dynamodb
, Firestore
, Mongodb
, Solr
등 많은 드라이버가 독립 실행형 확장으로 코어에서 자체 하위 저장소로 이동되었습니다.
작곡가를 통해 쉽게 추가할 수 있습니다. 예: composer install phpfastcache/couchbasev4-extension
그러나 Couchbasev3
호환성상의 이유로 핵심에 유지되지만 더 이상 사용되지 않습니다.
Phpfastcache는 3가지 주요 목표를 가지고 수년에 걸쳐 개발되었습니다.
Phpfastcache는 유용한 API를 많이 제공합니다.
방법 | 반품 | 설명 |
---|---|---|
addTag($tagName) | ExtendedCacheItemInterface | 태그를 추가합니다 |
addTags(array $tagNames) | ExtendedCacheItemInterface | 여러 태그를 추가합니다. |
append($data) | ExtendedCacheItemInterface | 문자열이나 배열에 데이터를 추가합니다(푸시). |
decrement($step = 1) | ExtendedCacheItemInterface | 쓸데없는 농담... |
expiresAfter($ttl) | ExtendedCacheItemInterface | 값을 변경하지 않고 항목의 수명을 연장할 수 있습니다(이전의 touch()). |
expiresAt($expiration) | ExtendedCacheItemInterface | 이 캐시 항목의 만료 시간을 설정합니다(DateTimeInterface 개체로). |
get() | mixed | getter는 분명히 캐시 객체를 반환합니다. |
getCreationDate() | DatetimeInterface | 이 캐시 항목의 생성 날짜를 가져옵니다(DateTimeInterface 객체로) * |
getDataAsJsonString() | string | 데이터를 올바른 형식의 json 문자열로 반환합니다. |
getEncodedKey() | string | 일반적으로 디버그 목적으로 사용되는 최종 및 내부 항목 식별자(키)를 반환합니다. |
getExpirationDate() | ExtendedCacheItemInterface | Datetime 객체로 만료 날짜를 가져옵니다. |
getKey() | string | 항목 식별자(키)를 반환합니다. |
getLength() | int | 데이터가 Countable 인터페이스를 구현하는 문자열, 배열 또는 개체인 경우 데이터 길이를 가져옵니다. |
getModificationDate() | DatetimeInterface | 이 캐시 항목의 수정 날짜를 가져옵니다(DateTimeInterface 객체로) * |
getTags() | string[] | 태그를 가져옵니다 |
hasTag(string $tagName) | bool | 캐시 항목에 특정 태그가 하나 포함되어 있는지 확인하세요. |
hasTags(array $tagNames, int $strategy): bool | bool | 캐시 항목에 선택적 전략이 포함된 하나 이상의 특정 태그가 포함되어 있는지 확인하세요(기본값은 TAG_STRATEGY_ONE). |
isTagged(): bool | bool | 캐시 항목에 태그가 하나 이상 있는지 확인하세요(v9.2). |
getTagsAsString($separator = ', ') | string | $separator로 구분된 문자열로 데이터를 가져옵니다. |
getTtl() | int | 남은 TTL(Time To Live)을 정수로 가져옵니다. |
increment($step = 1) | ExtendedCacheItemInterface | 정수 항목을 계산할 수 있도록 하려면 |
isEmpty() | bool | 적중/실패 상태에도 불구하고 데이터가 비어 있는지 확인합니다. |
isExpired() | bool | 캐시 항목이 만료되었는지 확인합니다. |
isHit() | bool | 캐시 항목이 존재하고 여전히 유효한지 확인합니다. 이는 isset()과 동일합니다. |
isNull() | bool | 적중/실패 상태에도 불구하고 데이터가 null인지 여부를 확인합니다. |
prepend($data) | ExtendedCacheItemInterface | 문자열이나 배열 앞에 데이터를 추가합니다(변동 해제). |
removeTag($tagName) | ExtendedCacheItemInterface | 태그를 제거합니다 |
removeTags(array $tagNames) | ExtendedCacheItemInterface | 여러 태그를 제거합니다. |
set($value) | ExtendedCacheItemInterface | 놓친 사람들을 위해 setter는 리소스나 직렬 변환기가 아닌 객체(예: PDO 객체, 파일 포인터 등)를 제외한 모든 것이 될 수 있습니다. |
setCreationDate($expiration) | DatetimeInterface | 이 캐시 항목의 생성 날짜를 설정합니다(DateTimeInterface 객체로) * |
setEventManager($evtMngr) | ExtendedCacheItemInterface | 이벤트 관리자를 설정합니다 |
setExpirationDate() | ExtendedCacheItemInterface | 만료At()의 별칭(추가 코드 논리) |
setModificationDate($expiration) | DatetimeInterface | 이 캐시 항목의 수정 날짜를 설정합니다(DateTimeInterface 객체로) * |
setTags(array $tags) | ExtendedCacheItemInterface | 여러 태그 설정 |
* 활성화하려면 구성 지시문 "itemDetailedDate"가 필요합니다. 그렇지 않으면 LogicException이 발생합니다. |
방법(알파벳순) | 반품 | 설명 |
---|---|---|
appendItemsByTag($tagName, $data) | bool | 태그로 항목을 추가합니다. |
appendItemsByTags(array $tagNames, $data) | bool | 여러 태그 이름 중 하나로 항목을 추가합니다. |
attachItem($item) | void | (재)풀에 아이템을 붙입니다. |
clear() | bool | 캐시를 완전히 비우고 처음부터 다시 시작할 수 있습니다. |
commit() | bool | 지연된 캐시 항목을 유지합니다. |
decrementItemsByTag($tagName, $step = 1) | bool | 태그별로 항목 감소 |
decrementItemsByTags(array $tagNames, $step = 1) | bool | 여러 태그 이름 중 하나로 항목을 줄입니다. |
deleteItem($key) | bool | 항목을 삭제합니다. |
deleteItems(array $keys) | bool | 하나 이상의 항목을 삭제합니다. |
deleteItemsByTag($tagName) | bool | 태그로 항목을 삭제합니다. |
deleteItemsByTags(array $tagNames, int $strategy) | bool | 여러 태그 이름 중 하나로 항목을 삭제합니다. |
detachItem($item) | void | 풀에서 항목을 분리합니다. |
getConfig() | ConfigurationOption | 구성 객체를 반환합니다. |
getConfigOption($optionName); | mixed | $optionName 키로 구성 값을 반환합니다. |
getDefaultConfig() | ConfigurationOption | 기본 구성 객체를 반환합니다(객체 인스턴스에 의해 변경되지 않음). |
getDriverName() | string | 현재 드라이버 이름을 반환합니다(네임스페이스 제외). |
getEventManager() | EventManagerInterface | 이벤트 관리자를 가져옵니다. |
getHelp() | string | 특정 드라이버에 대한 매우 기본적인 도움말을 제공합니다. |
getInstanceId() | string | 인스턴스 ID를 반환합니다. |
getItem($key) | ExtendedCacheItemInterface | 항목을 검색하고 찾을 수 없는 경우 빈 항목을 반환합니다. |
getItems(array $keys) | ExtendedCacheItemInterface[] | 하나 이상의 항목을 검색하고 항목 배열을 반환합니다. v9.2부터 이 방법에 대한 내부 개선이 이루어졌습니다. |
getAllItems(string $pattern = '') | ExtendedCacheItemInterface[] | (v9.2) 9999개 항목의 하드 제한이 있는 모든 캐시 항목을 검색합니다. 일부 드라이버로 제한되는 지원 |
getItemsAsJsonString(array $keys) | string | 항목 배열을 나타내는 json 문자열을 반환합니다. |
getItemsByTag($tagName, $strategy) | ExtendedCacheItemInterface[] | 태그로 항목을 반환합니다. |
getItemsByTags(array $tagNames, $strategy) | ExtendedCacheItemInterface[] | 여러 태그 이름 중 하나로 항목을 반환합니다. |
getItemsByTagsAsJsonString(array $tagNames, $strategy) | string | 해당 항목의 배열을 나타내는 json 문자열을 반환합니다. |
getStats() | DriverStatistic | 캐시 통계를 객체로 반환하며, 캐시 등에서 사용하는 디스크 공간을 확인하는 데 유용합니다. |
hasEventManager() | bool | 이벤트 관리자를 확인하세요 |
hasItem($key) | bool | 항목이 존재하는지 테스트합니다. |
incrementItemsByTag($tagName, $step = 1, $strategy) | bool | 태그별로 항목 증가 |
incrementItemsByTags(array $tagNames, $step = 1, $strategy) | bool | 여러 태그 이름 중 하나로 항목을 증가시킵니다. |
isAttached($item) | bool | 항목이 (여전히) 부착되어 있는지 확인 |
prependItemsByTag($tagName, $data, $strategy) | bool | 항목 앞에 태그를 추가합니다. |
prependItemsByTags(array $tagNames, $data, $strategy) | bool | 여러 태그 이름 중 하나를 항목 앞에 추가합니다. |
save(CacheItemInterface $item) | bool | 캐시 항목을 즉시 유지합니다. |
saveDeferred(CacheItemInterface $item) | bool | 나중에 유지되도록 캐시 항목을 설정합니다. |
saveMultiple(...$items) | bool | 여러 캐시 항목을 즉시 유지합니다. |
setEventManager(EventManagerInterface $evtMngr) | ExtendedCacheItemPoolInterface | 이벤트 관리자를 설정합니다 |
V8 : 이제 태그 지정에 여러 전략( $strategy
)이 지원됩니다.
TaggableCacheItemPoolInterface::TAG_STRATEGY_ONE
하면 지정된 일치 태그 중 하나 이상으로 캐시 항목을 가져올 수 있습니다. 기본 동작.TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL
사용하면 지정된 일치 태그 모두 로 캐시 항목을 가져올 수 있습니다(캐시 항목에 추가 태그가 있을 수 있음 ).TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY
사용 하면 지정된 일치 태그로만 캐시 항목을 가져올 수 있습니다(캐시 항목에는 추가 태그가 있을 수 없음 ).또한 다중 통화, 태깅, 캐싱을 위한 폴더 설정을 지원합니다. 자세한 내용은 예제 폴더를 살펴보세요.
Phpfastcache는 Phpfastcache 설치에 대한 기본 정보를 제공하는 클래스를 제공합니다.
PhpfastcacheApi::GetVersion();
PhpfastcacheApi::getChangelog();
PhpfastcacheApi::getPhpfastcacheVersion();
사용하여 Phpfastcache 버전을 가져옵니다.PhpfastcacheApi::getPhpfastcacheChangelog();
좋은 소식은 V6부터 매우 기본적인 getter/setter를 사용하여 캐시를 가장 단순하게 유지하기 위해 Psr16 어댑터가 제공된다는 것입니다.
get($key, $default = null);
set($key, $value, $ttl = null);
delete($key);
clear();
getMultiple($keys, $default = null);
setMultiple($values, $ttl = null);
deleteMultiple($keys);
has($key);
기본 사용법:
<?php
use Phpfastcache Helper Psr16Adapter ;
$ defaultDriver = ' Files ' ;
$ Psr16Adapter = new Psr16Adapter ( $ defaultDriver );
if (! $ Psr16Adapter -> has ( ' test-key ' )){
// Setter action
$ data = ' lorem ipsum ' ;
$ Psr16Adapter -> set ( ' test-key ' , ' lorem ipsum ' , 300 ); // 5 minutes
} else {
// Getter action
$ data = $ Psr16Adapter -> get ( ' test-key ' );
}
/**
* Do your stuff with $data
*/
내부적으로 Psr16 어댑터는 캐시 관리자를 통해 Phpfastcache Api를 호출합니다.
V6부터 Phpfastcache는 이벤트 메커니즘을 제공합니다. 활성 이벤트에 클로저를 전달하여 이벤트를 구독할 수 있습니다:
<?php
use Phpfastcache EventManager ;
/**
* Bind the event callback
*/
EventManager:: getInstance ()-> onCacheGetItem ( function ( ExtendedCacheItemPoolInterface $ itemPool , ExtendedCacheItemInterface $ item ){
$ item -> set ( ' [HACKED BY EVENT] ' . $ item -> get ());
});
이벤트 콜백은 바인딩 해제될 수 있지만 이전에 콜백에 이름을 제공해야 합니다.
<?php
use Phpfastcache EventManager ;
/**
* Bind the event callback
*/
EventManager:: getInstance ()-> onCacheGetItem ( function ( ExtendedCacheItemPoolInterface $ itemPool , ExtendedCacheItemInterface $ item ){
$ item -> set ( ' [HACKED BY EVENT] ' . $ item -> get ());
}, ' myCallbackName ' );
/**
* Unbind the event callback
*/
EventManager:: getInstance ()-> unbindEventCallback ( ' onCacheGetItem ' , ' myCallbackName ' );
V8 부터는 Phpfastcache의 모든 이벤트를 간단히 구독할 수 있습니다.
구현 및 이벤트에 대한 자세한 내용은 Wiki에서 확인할 수 있습니다.
V6부터 Phpfastcache는 코드를 더 쉽게 만드는 데 도움이 되는 몇 가지 도우미를 제공합니다.
앞으로 더 많은 것이 나오길 바랍니다. 자유롭게 기여해 주세요!
집계된 캐시 클러스터링 기능을 구현하는 방법을 알아보려면 WIKI를 확인하세요.
composer require phpfastcache/phpfastcache
<?php
use Phpfastcache CacheManager ;
use Phpfastcache Config ConfigurationOption ;
// Setup File Path on your config files
// Please note that as of the V6 .1 the "path" config
// can also be used for Unix sockets ( Redis , Memcache , etc )
CacheManager:: setDefaultConfig ( new ConfigurationOption ([
' path ' => ' /var/www/phpfastcache.com/dev/tmp ' , // or in windows "C:/tmp/"
]));
// In your class , function , you can call the Cache
$ InstanceCache = CacheManager:: getInstance ( ' files ' );
/**
* Try to get $products from Caching First
* product_page is "identity keyword";
*/
$ key = " product_page " ;
$ CachedString = $ InstanceCache -> getItem ( $ key );
$ your_product_data = [
' First product ' ,
' Second product ' ,
' Third product '
/* ... */
];
if (! $ CachedString -> isHit ()) {
$ CachedString -> set ( $ your_product_data )-> expiresAfter ( 5 ); //in seconds , also accepts Datetime
$ InstanceCache -> save ( $ CachedString ); // Save the cache item just like you do with doctrine and entities
echo ' FIRST LOAD // WROTE OBJECT TO CACHE // RELOAD THE PAGE AND SEE // ' ;
echo $ CachedString -> get ();
} else {
echo ' READ FROM CACHE // ' ;
echo $ CachedString -> get ()[ 0 ]; // Will print ' First product'
}
/**
* use your products here or return them;
*/
echo implode ( ' <br /> ' , $ CachedString -> get ()); // Will echo your product list
호기심이 많은 개발자를 위해 여기에는 다른 많은 예제가 있습니다.
문제를 발견했거나 아이디어가 있습니까? 여기로 와서 우리에게 알려주세요!