1

現在、CouchDB と RESTlet を使用して REST Web サービスを実装しています。RESTlet レイヤーは、主に認証と、CouchDB によって提供される JSON データのいくつかのマイナーなフィルタリング用です。

クライアント <= HTTP => [ RESTlet <= HTTP => CouchDB ]

ユーザー ログイン データの保存にも CouchDB を使用しています。その目的のためにデータベース サーバーを追加したくないからです。したがって、私のサービスへの各リクエストは、RESTlet によって実行される 2 つの CouchDB リクエスト (認証データ + 「実際の」リクエスト) を引き起こします。サービスを可能な限り効率的に保つために、リクエストの数を減らしたいと考えています。この場合、ログイン データの冗長なリクエストです。

私の考えは、RESTlet アプリケーション内にログイン データをキャッシュするキャッシュ (LinkedHashMap 経由の ieLRU-Cache) を提供することです。HTTP キャッシュではおそらく十分ではないからです。しかし、たとえばユーザーがパスワードを変更すると、キャッシュ データを無効にするにはどうすればよいでしょうか。REST のおかげで、アプリケーションは複数のサーバーで並行して実行される可能性があり、ログイン データをキャッシュするためだけに中央インスタンスを作成したくありません。

現在、リクエストされた認証データをキャッシュに保存し、それらを使用して新しいリクエストを認証しようとしています。認証が失敗した場合、または利用可能なエントリがある場合は、実際の認証データを取得するために CouchDB ストレージに GET リクエストをディスパッチします。そのため、最悪の場合、データを変更したユーザーは古い認証情報でログインできる可能性があります。どうすれば対処できますか?

または、一般的にキャッシュを最新の状態に保つための良い戦略は何ですか?

前もって感謝します。

4

2 に答える 2

1

memcached のような分散型メモリ内キャッシュが探しているものかもしれません。オブジェクトの経過時間、キャッシュ サイズを構成し、コールバックを公開して特定のオブジェクトをキャッシュから削除することもできます (情報が古い場合など)。

于 2010-04-10T20:54:07.163 に答える
1

私には、「プロフェッショナルな」キャッシュソリューション( EHCache など)を使用するのに十分なほど成長したように見えます。すべての分散キャッシュにより、異なるノード間での新しいデータの複製と無効化が可能になるため、問題はすでに解決されています。

于 2010-04-10T20:46:00.227 に答える