Memcached のエンティティ タイプはシリアル化せずに Memcached にキャッシュできないため、エンティティ クラスをキャッシュする前に処理する必要があります。
Memcached は、データベースを削減するための動的 Web アプリケーション用の高性能分散メモリ オブジェクト キャッシュ システムです。負荷。データとオブジェクトをメモリにキャッシュしてデータベースの読み取り回数を減らすことにより、動的なデータベース駆動型の Web サイトの速度が向上します。 Memcached は、キーと値のペアを格納するハッシュマップに基づいています。そのデーモンは C で書かれていますが、クライアントは任意の言語で書くことができ、memcached プロトコルを通じてデーモンと通信します。
Memcached を使用して文字列型や内部でシリアル化されたその他の型をキャッシュできますが、カスタム型の場合、Memcached はシリアル化されたデータのみをキャッシュできるため、Memcached にキャッシュすることはできません。したがって、ここではカスタム エンティティ タイプをシリアル化し、 Memcached に保存します。
まず、Windows プラットフォームで memcached をダウンロードし、インストールします。インストール後、cmd で dos コマンドを入力するか、[コンピューターの管理] -> [サービス] -> [memcached] -> [開始] でサービスを開始できます。
その後、関連情報をプロジェクトに導入できます。 dll:
Commons.dll、ICSharpCode.SharpZipLib.dll、log4net.dll、Memcached.ClientLibrary.dll
プロジェクト リファレンスに Memcached.ClientLibrary.dll を導入します
次に、プログラムを作成します。ここで MVC プログラムを作成します。
Models フォルダーにクラスを作成します:
[Serializable] public class VIP { public string UserName { get; set; } public int? Vip { get; set; } public DateTime? VipEndDate { get; set; } public string Mail { get; set; } public string QQ { get; set; } }
シリアル化可能としてマークされていない場合、後でプログラムを実行するときにエラーが報告されます。
次に、プログラミングを支援する MemcachedHelper クラスを作成します。
public class MemcachedHelper { public static MemcachedClient mclient; static MemcachedHelper() { string[] serverlist = new string[] { "127.0.0.1:11211" }; SockIOPool pool = SockIOPool.GetInstance("First"); pool.SetServers(serverlist); pool.Initialize(); mclient = new MemcachedClient(); mclient.PoolName = "First"; mclient.EnableCompression = false; } public static bool set(string key, object value, DateTime expiry) { return mclient.Set(key, value, expiry); } public static object Get(string key) { return mclient.Get(key); } }
最後に、コントローラーでの特定の実装:
public class EntityMemcachedController : Controller { // // GET: /EntityMemcached/ /// <summary> /// 序列化实体类为字节数组,将其存储到Memcached中,以缓存数据,从而减轻访问压力.... /// </summary> /// <returns></returns> public ActionResult Index() { var vipInfo = new List<VIP>{ new VIP{ UserName="张三", Vip=1, QQ="3123456", Mail="3123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(1) }, new VIP{ UserName="李四", Vip=1, QQ="4123456", Mail="4123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(2) }, new VIP{ UserName="王五", Vip=1, QQ="5123456", Mail="5123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(3) }, new VIP{ UserName="赵六", Vip=1, QQ="6123456", Mail="6123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(4) }, new VIP{ UserName="刘七", Vip=1, QQ="7123456", Mail="7123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(5) } }; if (Request.Cookies["_EntityMemcached"] == null) { string sessionId = Guid.NewGuid().ToString(); Response.Cookies["_EntityMemcached"].Value = sessionId; Response.Cookies["_EntityMemcached"].Expires = DateTime.Now.AddMinutes(1);//设置cookie过期时间 MemcachedHelper.set(sessionId, vipInfo, DateTime.Now.AddMinutes(1));//设置缓存过期时间 return Content("Memcached分布式缓存设置成功!!!"); } else { string key = Request.Cookies["_EntityMemcached"].Value.ToString(); object obj = MemcachedHelper.Get(key); List<VIP> info = obj as List<VIP>; if (info != null) { return View(info); } } return Content("若显示则有'bug'"); }
実装を確認します:
その後、終了して [Implement] をクリックします。 memcached 「もう一度キャッシュ」
キャッシュを 1 分以内に設定したので、このインターフェイスは常にこの 1 分以内になります。memcached はまだ優れていると言わざるを得ません。次に、OutputCached + Monogodb のキャッシュ戦略を検討します
以上が高性能キャッシュシステム(Memcached)の導入事例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。