Perlプロセス間で共有されるキャッシュに(ハッシュとして)ロードする必要のある大きなファイルがあります。データをキャッシュにロードするには約2秒かかりますが、1秒あたり10回以上の呼び出しがあります。
計算メソッドを使用すると、他のプロセスがロックアウトされますか?それ以外の場合は、ロード中にロックが保証され、ロードプロセスが1つだけ発生するように、ロードプロセスを管理する方法についての提案をいただければ幸いです。
ありがとう!
保証されたロックについてはわかりませんが、ミューテックスの代替として既知のキーで memcached を使用できます (この記事の執筆時点では、「キャッシュ」が何であるかは言及されていません)。キーの値が false の場合は、true に設定し、読み込みを開始してから結果を返します。
その間に発生するリクエストについては、ビジー待機するか、Retry-After フィールドに数秒を指定して503 "Service Unavailable"ステータスを使用してみてください。これに対するブラウザのサポートについてはわかりません。
おまけとして、ミューテックス キーでたとえば 5 分の Time-to-Live を使用すると、ファイル全体が 5 分ごとにリロードされます。それ以外の場合、別の理由でファイルをリロードする場合は、キーを手動で削除する必要があります。