29

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

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

System.Web.Caching

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

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

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

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

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

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

分散キャッシュが不要な場合の長所と短所は何ですか?

4

4 に答える 4

18

これらは、キャッシングのトピックについて私が検討している項目です。

MemCached Win32 Velocity .net Cache エンタープライズ ライブラリ キャッシング アプリケーション ブロック

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

Velocity:これは、MemCached などの製品に対する Microsoft の回答です。MemCached はかなり長い間使用されておらず、Velocity は CTP モードになっています。私がこれまでに読んだことから、この製品が出たら確実に頭が下がると言わざるを得ません. しかし、実績のない CTP 製品で大規模な生産プロジェクトを実行することはできません。MemCached が勢いを増すと、Windows の世界に閉じ込められたものとは比較にならないので、私はそれをいじり始めました。 http://blogs.msdn.com/velocity/

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

エンタープライズ アプリケーション ブロック:私はすべてのエンタープライズ アプリケーション ブロックから離れています。それらは、私が通常必要とする以上のものを提供する重いフレームワークです! あなた自身のものではないコードに触れるすべてをラップし、コーディングの簡単なルールに従うことを忘れない限り、この方法よりも他の方法に固執してください! (もちろん私の意見です。MySpace は Enterprise Application Blocks を最大限に活用しています!)

事前に選ぶ必要はありません! 私は通常、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 ) アンドリュー・シーマー www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net

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

于 2009-06-11T22:21:21.470 に答える
3

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

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

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

于 2008-08-22T09:37:44.507 に答える
2

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

于 2008-08-22T06:21:15.930 に答える
-2

@ダビデ・ボスティ

「彼らがそれをウェブの名前空間に置くのであれば、それには正当な理由があると思います。」ロボット スタジオのコンカレンシーおよびコーディネーション ランタイム (CCR) にも同じロジックが適用されますか? 番号?そうは思いませんでした。

于 2008-10-23T00:28:11.167 に答える