私は RESTful API を開発しており、OAuth 2.0 認証を実装しています。
私のすべてのクライアントは、SSL 経由で Authorization ヘッダーにベアラー トークンを渡すリクエストを作成します。
Authorization: Bearer sdflksd3r4823vgbyerge
現在、Postgres にアクセス トークンとリフレッシュ トークンを保存しているため、リクエストごとにサーバーがデータベースに接続して SELECT クエリを実行する必要があります。「tokens」テーブルには約 100 万行が含まれているため、テーブルにインデックスが作成されていても、パフォーマンスはあまり良くありません... また、すべてのリクエストでトークンの有効性をチェックするのはかなり時間の無駄だと思います。
私たちのトークンは、データのランダムなバイトです。データベースを参照せずにトークンをデコードして検証できるように、自己エンコードされたトークンを使用することを検討しましたが、トークンはユーザーから取り消し可能でなければならないという問題があるため、これは解決策ではありません。
私のオプションは何ですか?
Postgres の代わりにRedisを使用することを考えていました: 読み取りははるかに高速になるはずです。別のオプションとして、トークンの有効性を確認し、レスポンスを Memcached に 15 分間キャッシュして、後続のリクエストでデータベース ルックアップが不要になるようにすることもできます。
何か案は?