質問

Web アプリケーションとリッチ クライアント アプリケーションの両方で使用される .NET コンポーネントの場合、キャッシュには 2 つの明らかなオプションがあるようです。System.Web.Caching または Ent.リブ。キャッシュブロック。

  • あなたは何を使うのですか?
  • なぜ?

システム.Web.キャッシュ

これは Web アプリ以外で安全に使用できますか?さまざまな情報を見てきましたが、その答えはおそらく、実際にはそうではないと思います。

そのハイライトを使用する予定はありませんが、 SqlCacheDependency, 、しかし追加 CacheItemUpdateCallback .NET 3.5 では本当に良いことのように思えます。

エンタープライズ ライブラリ キャッシュ アプリケーション ブロック

  • 他のブロックはすでに使用されているため、依存関係はすでに存在します。
  • キャッシュの永続性は必要ありません。再起動時にキャッシュを再生成しても問題ありません

一部のキャッシュ項目は常に使用可能である必要がありますが、定期的に更新されます。これらの項目については、コールバックを取得します 項目が削除されているのはあまり便利ではありません。クライアントは、キャッシュ項目が再設定されるまでスリープしてポーリングする必要があるようです。

Win32 用の Memcached + .NETクライアント

必要ない場合のメリットとデメリットは何ですか? 配布された キャッシュ?

役に立ちましたか?

解決

キャッシュのトピックに関して私が考慮する項目は次のとおりです。

memcached win32 velocity .netキャッシュエンタープライズライブラリキャッシングアプリケーションブロック

MemCached Win32: 最近まで、MemCached Win32 を使用していました。これは Web ファーム (高可用性のために同じコンテンツを提供する多数のサーバー) に似ていますが、キャッシュ ファームです。これは、規模を拡大するためのリソースがない場合に、最初に Web サーバーにローカルにインストールできることを意味します。その後、将来的には水平方向 (サーバーの増加) または垂直方向 (ハードウェアの増加) に拡張できます。これは、オリジナルの MemCached を Windows 上で動作するように移植された製品です。この製品は、トラフィックが非常に多いサイトで広く使用されています。 http://lineofthought.com/tools/memcached

速度: これは、MemCached などの製品に対する Microsoft の回答です。MemCached はかなり前からリリースされており、Velocity は CTP モードになっています。これまで読んだことから、この製品は発売されたら間違いなく注目を集めるだろうと言わざるを得ません。しかし、実績のない CTP 製品で大規模な制作プロジェクトを実行する気にはなれません。MemCached が勢いを増すと、Windows の世界に閉じ込められているものとは比較にならないので、私はそれを試し始めました。 http://blogs.msdn.com/velocity/

.NETキャッシュ: 標準の .NET キャッシュを軽視する理由はありません。組み込まれており、(主要な)セットアップを必要とせずに無料ですぐに使用できます。ローカル メモリ、単一状態サーバー、または集中データベースに項目を保存するためのメカニズムを提供することにより、柔軟性が提供されます。Velocity が介入するのは、複数の状態サーバー (メモリ内のキャッシュ) が必要で、キャッシュを保持するために遅いデータベースを使用したくない場合です。

エンタープライズ アプリケーション ブロック: 私はエンタープライズ アプリケーション ブロックには一切触れません。これらは、私が通常必要とする以上のものを提供する重いフレームワークです。自分のものではないコードに関わるすべてのものをラップすることを忘れずに、コーディングの簡単なルールに従う限り、この方法ではなく他の方法を使用してください。(もちろん、単なる私の意見です - MySpace はエンタープライズ アプリケーション ブロックを可能な限り活用しています!)

事前に選択する必要はありません。 私は通常、Get、Set、Exists、Remove、ListKeys などのメソッドのコード内で通信するキャッシュ ラッパーを作成します。これは、MemCached、Velocity、または .NET キャッシュを指すことができるキャッシュ抽象化の基礎となるレベルを指します。StructureMap を使用して (または別の IoC コンテナーを選択して)、特定の環境に使用するキャッシュの形式を挿入します。ローカルの開発ボックスでは、セッションで .NET キャッシュを使用する場合があります。本番環境では通常、MemCached Win 32 を使用します。ただし、設定方法に関係なく、簡単に変更して各システムを試し、何が最適かを確認することができます。必要なのは、アプリケーションがどのようにキャッシュされるかを可能な限り認識しないようにすることだけです。この抽象化レイヤーが導入されると、キャッシュに出入りするすべてのデータに対して圧縮アルゴリズム (gzip) を実行するなどの作業が可能になり、これにより 10 倍の量のデータをキャッシュに保存できるようになります。- 透明に.

興味があれば、私の本で .NET Cache、MemCached Win32、StructureMap、および適切な抽象化について説明します。

ASP.NET 3.5 ソーシャル ネットワーキング (http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise-ready/dp/1847194788/ref=sr_1_1?ie=UTF8&s=books&qid=1225408005&sr=8-1 )Andrew Siemer www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net

アップデートmemcached を使用しているサイトをリストするリンクを変更しました。デビッド、壊れていることに気づいてくれてありがとう!

他のヒント

EntLib のドキュメントでは、特に ASP.NET アプリケーションの ASP.NET キャッシュに向けて説明されていることに留意してください。おそらくこれが、ここで使用することに対する最も強力な推奨事項です。さらに、EntLib キャッシュには依存関係がありません。これが私にとって、EntLib キャッシュを使用しない大きな理由です。

System.Web をアプリの一部として出荷すること自体に技術的な制限があるとは思えませんが、.NET 3.5 ページにその通知が記載されているのは少し奇妙です。実際、ヘンセルマンは、最初はこの考えに気味が悪かったが、確信するようになったと言います。また、コメントを読むと、ブロックには可動部分が多すぎて、ASP.NET キャッシュははるかに軽量であると述べています。
まさにそういう問題だと思います 速度 解決する予定ですが、これは今のところプレビューにすぎません :-(

Web.Caching を使用して、うまくいくか試してみましょう。その上にある種の抽象化レイヤーを配置すると、後で問題が見つかった場合にそれを EntLib ブロックに置き換えることができます。

を見てみましょう memcached. 。これは非常に優れた、高速かつ軽量の分散キャッシュ システムです。C# など、最も人気のある言語の API がいくつかあります。クライアント側ではうまく機能しない可能性があります (もちろんクライアントが何らかのサーバーからキャッシュされたデータを取得している場合を除く) が、memcached の使用法を特定のインターフェイスに抽象化すると、そのインターフェイスを別のキャッシュで実装できます。システム。

@デビデ・ヴォスティ

「彼らがそれをWebネームスペースに入れたら、それは正当な理由だと思います。」その同じロジックは、ロボットスタジオの並行性と調整ランタイム(CCR)に適用されますか?いいえ?そうは思わなかった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top