PHP開発では、 APCUは非常に効率的なユーザーデータキャッシュ拡張機能であり、特に繰り返し計算が頻繁に呼び出されるシナリオでは、スクリプトのパフォーマンスを大幅に改善できます。 APCUは主にWeb環境で使用されていますが、コマンドライン(CLI)モードでのキャッシュにも使用でき、一部の構成と予防策のみが必要です。この記事では、APCU_ENTRY()関数を使用してCLI環境で効率的なキャッシュを実現し、使用の例を紹介する方法を紹介します。
APCU_ENTRY()は、キャッシュ操作を簡素化するためにAPCU拡張機能に提供される利便性関数です。引数としてキー名とコールバック関数を受け入れます。キャッシュに対応するキーがある場合、キャッシュされた値を直接返します。そうでない場合は、値を取得して結果をキャッシュするためにコールバック関数が実行されます。
構文は次のとおりです。
mixed apcu_entry(string $key, callable $callback, int $ttl = 0)
$キー:キー名をキャッシュします。
$ callback :キャッシュされたコンテンツを生成するコールバック関数。
$ TTL :キャッシュサバイバル時間(ユニット:秒)、オプション。
デフォルトでは、APCUはCLIモードでオフになります。コマンドラインでapcu_entry()を使用するには、構成ファイルを変更するか、コマンドラインで明示的に有効にする必要があります。
php -d apc.enable_cli=1 your_script.php
またはphp.iniを変更します:
apc.enable_cli=1
非常に時間のかかるデータベースクエリまたはAPIリクエストがあると仮定し、結果をキャッシュして、複製の実行を避けることができます。
<?php
$key = 'api_data';
$data = apcu_entry($key, function () {
// シミュレーションの時間式操作,たとえば、電話してください https://gitbox.net/api/data
sleep(5); // 操作に時間がかかると仮定します52番
return file_get_contents('https://gitbox.net/api/data');
}, 60); // キャッシュ602番
echo $data . PHP_EOL;
?>
最初の実行中、プログラムはリモートデータを取得するために5秒待ちます。スクリプトを再度実行すると、60秒を超えない限り、結果はキャッシュから直接読み取られ、ほぼ瞬時に応答します。
サバイバルの時間(TTL) : APCU_ENTRY()は、 TTLの設定をサポートしています。設定しない場合、デフォルトのキャッシュは期限切れにならず、手動でクリアする必要があります。
同時アクセス:APCUはWeb環境ではスレッドセーフですが、CLIスクリプトでは、同時アクセスがある場合は、人種の状態を回避するためにロックメカニズム(ファイルロックなど)を追加することをお勧めします。
持続性の問題:APCUキャッシュはメモリにあります。 CLIが実行された直後にキャッシュは消えません。 PHPプロセスが再起動しない限り、それでも有効です。ただし、Webモードとは異なり、実行環境に依存します。
APCU_ENTRY()を使用すると、キャッシュメカニズムをコマンドラインスクリプトに非常に便利に実装でき、それにより、反復コンピューティングまたはリモートコールのパフォーマンス消費が大幅に削減されます。 CLIモードAPCUサポートが有効になっていることを確認し、適切なTTLおよびデータキー名管理により、効率的なローカルキャッシュシステムを簡単に構築できます。これは、頻繁に実行する必要があるCLIツールまたはタイミングタスクの非常に価値のある最適化方法です。