V9 は以前のバージョンとの互換性が比較的低いため、可能な限りスムーズに移行できるように移行ガイドをよく読んでください。最大の変更点の 1 つは、構成システムです。これは、当時実装していたプリミティブ配列を置き換えるオブジェクトになりました。また、V9 が正しく動作するには、少なくとも PHP 8 以降が必要であることに注意してください。
詳細については Wiki を参照してください。 抽象化のシンプルさ: 1 つのクラスで多数のバックエンド キャッシュを対応します。コードを何度も書き直す必要はありません。
新しいプル リクエストを作成して、お気軽にドライバーを提案してください。大歓迎です。
一般ドライバー | 高性能ドライバー | 開発ドライバー(コア) | クラスター集約ドライバー(コア) |
---|---|---|---|
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 を通じて簡単に追加できます。例: 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 | 明らかに、ゲッターはキャッシュ オブジェクトを返します。 |
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 | キャッシュ項目に特定のタグが 1 つ含まれているかどうかを確認する |
hasTags(array $tagNames, int $strategy): bool | bool | キャッシュ アイテムにオプションの戦略 (デフォルトは TAG_STRATEGY_ONE) を持つ 1 つ以上の特定のタグが含まれているかどうかを確認します。 |
isTagged(): bool | bool | キャッシュ項目に少なくとも 1 つのタグがあるかどうかを確認する (v9.2) |
getTagsAsString($separator = ', ') | string | $separator で区切られた文字列としてデータを取得します |
getTtl() | int | 残りの生存時間を整数として取得します |
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 | 見逃した人のために説明すると、セッターはリソースまたは非シリアライザー オブジェクト (例: PDO オブジェクト、ファイル ポインターなど) 以外のものであれば何でもかまいません。 |
setCreationDate($expiration) | DatetimeInterface | このキャッシュ アイテムの作成日を (DateTimeInterface オブジェクトとして) 設定します * |
setEventManager($evtMngr) | ExtendedCacheItemInterface | イベントマネージャーを設定します |
setExpirationDate() | ExtendedCacheItemInterface | expireAt() のエイリアス (その他のコード ロジック用) |
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 | 1 つ以上の項目を削除します |
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[] | 1 つ以上の項目を取得し、項目の配列を返します。 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
と、指定された一致するタグの少なくとも1 つによってキャッシュ アイテムを取得できます。デフォルトの動作。TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL
と、指定された一致するタグのすべてによってキャッシュ アイテムを取得できます (キャッシュ アイテムには追加のタグを含めることができます)TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY
と、指定された一致するタグのみによってキャッシュ アイテムを取得できます (キャッシュ アイテムに追加のタグを含めることはできません)。また、複数の呼び出し、タグ付け、キャッシュ用のセットアップフォルダーもサポートしています。詳細については、サンプル フォルダーを参照してください。
Phpfastcache は、Phpfastcache のインストールに関する基本情報を提供するクラスを提供します。
PhpfastcacheApi::GetVersion();
を使用して API バージョン (Item+Pool インターフェイス) を取得します。PhpfastcacheApi::getChangelog();
PhpfastcacheApi::getPhpfastcacheVersion();
を使用して Phpfastcache のバージョンを取得します。PhpfastcacheApi::getPhpfastcacheChangelog();
良いニュースです。V6 では、非常に基本的なゲッター/セッターを使用してキャッシュを最も単純に保つための 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 はイベント メカニズムを提供します。アクティブなイベントに Closure を渡すことで、イベントをサブスクライブできます。
<?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
好奇心旺盛な開発者のために、ここには他にもたくさんの例があります。
問題が見つかりましたか、それともアイデアがありますか?ここに来て知らせてください!