1) 頻繁に実行される、2) 多くの異なるプロセスによって実行される、3) 時間がかかるスクリプトがあります。
更新: 時間がかかるのは、すべてのプロセスで結果が同じになるテストです。完全に冗長です。
キャッシングを行う時期だと思いますが、人種、紛争、腐敗、時間の渦の不安定性、ニワトリの可能性について心配しています.
どのプロセスもキャッシュを更新するだけでなく、キャッシュを読み取る可能性があるため、複雑になります。そのため、これらすべての組み合わせを処理する方法を知る必要があります。
これは、私よりも頭が良く、教育を受けた誰かがおそらくすでに理解しているような匂いがします。
とにかく、この質問をより具体的にするために、これまでに私が考えたことは次のとおりです。私は頭の中で群れを使用していますが、それが良い考えかどうかはわかりません。
- キャッシュが新鮮な場合は、それを読んで立ち去る
- キャッシュが古い場合
- 書き込みロックを取得しようとする
- ロックを取得したら、テストを実行してキャッシュを更新します
- 私がロックを取得できない場合、他の誰かが書き込みまたは読み取りロックを取得していますか?
- 共有されている場合、なぜ彼らは古いキャッシュを読んでいるのですか? 私はそれらを無視し、テストを行い、キャッシュを更新しますか (または、これにより半分書き込まれたキャッシュが読み取られる可能性があります...えーと...)
- 排他的である場合は、テストを完了してキャッシュを更新するための短い時間を与えます。
- 書き込みロックを取得しようとする
それが理にかなっていることを願っています...