アプリケーション全体で使用できるハッシュマップ(PHPの連想配列)をPHPに実装しようとしています。つまり、アプリケーションコンテキストに保存します。プログラムが終了しても失われません。PHPでこれを達成するにはどうすればよいですか?
ありがとう、
アプリケーション全体で使用できるハッシュマップ(PHPの連想配列)をPHPに実装しようとしています。つまり、アプリケーションコンテキストに保存します。プログラムが終了しても失われません。PHPでこれを達成するにはどうすればよいですか?
ありがとう、
Zend のバージョンの php を使用している場合は、簡単です。
データをシリアル化する必要はありません。
キャッシュできるのはコンテンツのみです。ファイルハンドルなどのリソースはできません。true/false を保存するには、1,0 を使用して、キャッシュの失敗と結果を で区別できるようにします===
。
店:
zend_shm_cache_store('cache_namespace::this_cache_name',$any_variable,$expire_in_seconds);
取得:
$any_variable = zend_shm_cache_fetch('cache_namespace::this_cache_name');
if ( $any_variable === false ) {
# cache was expired or did not exist.
}
長期間有効なデータの場合は、次を使用できます。
zend_disk_cache_store();zend_disk_cache_fetch();
zend を使用していない場合は、上記の対応する APC バージョン:
店:
apc_store('cache_name',$any_variable,$expire_in_seconds);
取得:
$any_variable = apc_fetch('cache_name');
if ( $any_variable === false ) {
# cache was expired or did not exist.
}
言及された他の方法を使用したことはありません。共有メモリを利用できない場合は、データをディスクにシリアル化/非シリアル化できます。もちろん、共有メモリははるかに高速であり、zend の優れた点は、同時実行の問題を処理し、名前空間を許可することです。
店:
file_put_contents('/tmp/some_filename',serialize($any_variable));
取得:
$any_variable = unserialize(file_get_contents('/tmp/some_filename') );
編集:同時実行の問題を自分で処理するには、ロックを使用するのが最も簡単な方法だと思います。この疑似コードでは、lock exists と get lock の間で競合状態が発生する可能性がまだありますが、要点はわかります。
疑似コード:
while ( lock exists ) {
microsleep;
}
get lock.
check we got lock.
write value.
release lock.