要求の間に開いたデータベースへの接続を維持することは、パフォーマンスの観点からは良い考えです。その理由は、接続の開始と終了がフリーではなく、リクエストが多すぎると問題になる可能性があるためです。データベースが特定の接続数までしか処理できないという別の問題があり、さらに開くとデータベースのパフォーマンスが低下するため、同時に開いている接続数を制御する必要があります。
これらの問題を解決するには、接続プールを使用することができます。接続プールには、多数の開いているデータベース接続が含まれており、それらにアクセスできます。接続からデータベース操作を実行するときは、プールから取得する必要があります。操作が完了したら、接続をプールに戻す必要があります。すべての接続が確立されたときに接続が要求された場合、呼び出し側は接続がプールに返されるまで待機する必要があります。この処理では新しい接続が開かれていないので(あらかじめすべて開かれています)、これによりデータベースに並列接続が多すぎることがありません。
接続プールが正しく使用されている場合、1つのスレッドのみが1つの接続を使用して、いつでも使用します。
接続プールには状態(現在どの接続が使用されているかを記録する必要があります)がありますが、APIはステートレスになります。これは、APIの観点からは、「ステートレス」とはAPIユーザーに状態/副作用がないことを意味するためです。サーバーは、ログファイルへの書き込みやキャッシュへの書き込みなどの内部状態を変更する多くの操作を実行できますが、API呼び出しに対する返信として返されるデータには影響しないため、このAPIを「ステートフル」にすることはできません。
Redis接続プールhereを使用した例がいくつかあります。
どこに格納するかについては、purposeの方が適しているため、アプリケーションコンテキストを使用します。
ありがとうございます、私はアプリケーションのコンテキストを試しましたが、要求の間には持続しません。リクエストでgから接続を引き出すたびに、Noneです。それは要求の後にそれを引き裂くようだ。 – user1658296