EDIT
チャッキング(例外のスロー)を開始すると、キャッシュする「悪い」データはありません。例外をキャッチすることで、Either[Why-Fail, Option[T]] にラップされていたとしても、自分の作業が増えるだけでした。例外は(理想的には)例外的であるため、ログに記録し、スローし、先に進みます...
ORIGINAL
キャッシングは良いが、失敗した操作のキャッシングは悪い
Cache.orElse("directory.active") {
Ok( dao.findAll(active = true) as json )
}
DAO データベースのルックアップが失敗する可能性があり (この場合、データベース/クエリの失敗で空のリストが返されます)、結果として不正なデータがキャッシュされます。
これを回避するには?クエリを 1 回だけ実行し、その後のリクエストのためにキャッシュします。Scala では遅延初期化を行うことができますが、それは永続的なキャッシュを作成することになり、これも望ましくありません (メンバー ディレクトリの追加/編集時にキャッシュをクリアする必要があります)。
これがどのプラットフォームにも当てはまると仮定します。基本的には、操作を 1 回実行し、成功した結果をキャッシュする必要があります。