ASP.NET Web API ODataサービスでは、ほとんど静的(1日に1回の変更がある可能性があります)のオブジェクトのコレクションをキャッシュする必要があります。この結果セットは、コール全体(つまり、クライアントコール固有ではない)で使用されるため、アプリケーションレベルでキャッシュする必要があります。Web APIでデータをキャッシュする
私は 'Web APIのキャッシュ'を検索しましたが、すべての結果は「出力キャッシュ」に関するものでした。それは私がここで探しているものではありません。私は後続の呼び出しで再利用される 'People'コレクションをキャッシュしたい(スライディングの有効期限があるかもしれない)。
これは単なるASP.NETなので、私はこのコレクションをメモリ内に永続化するための従来のアプリケーションキャッシュテクニックを使用しますか、それとも何か他に必要なことはありますか?このコレクションはではなく、が直接ユーザーに返されますが、APIコールを使用してODataクエリの背後にあるソースとして使用されます。 正確なをすべての呼び出しで同じ情報にするために、すべての呼び出しでデータベースにアクセスする必要はありません。それを時間切れにするだけで十分です。
このシナリオでデータを正しくキャッシュする方法を知っている人はいますか?
はい、これを書いた後、私は完璧に見える 'System.Runtime.Caching'名前空間に' MemoryCache'を発見しました。 AppPoolがリサイクルするとデータを失う可能性があるという警告は、*すべての* API呼び出しでDBを再呼び出しするのを防ぐためです。 'MemoryCache.Get()'と 'MemoryCache.Add()'を使うと、私にとってはうまくいくようです。 'AddOrGetExisting()'はクールだが、私の状況ではうまくいかなかった。呼び出しの前にDBからデータを取得する必要があります。私は30分の「AbsoluteExpiration」を設定しました。 – atconway
途中で人々を助けるためのマーカーとして、Azureの推奨されるキャッシング技術は現在Redisです。 APIのインスタンスが2つ以上ある場合は、Redisまたは別の分散キャッシュが必要です。 Azure Managed Cacheは非常に隠されており、Powershellからしかアクセスできません。彼らは以前にそれを使用した人々を助けるためにそこにそれを保持しているだけです。 –
Redisは、あなたがやっているすべての作業がWebApiデータコールをキャッシュしている場合には高価です。 –