집 >백엔드 개발 >C#.Net 튜토리얼 >고성능 캐싱 시스템(Memcached) 도입 사례
Memcached의 엔터티 유형은 직렬화 없이는 Memcached에 캐시될 수 없으므로 엔터티 클래스를 캐시하기 전에 처리해야 합니다.
Memcached는 데이터베이스를 줄이기 위한 동적 웹 애플리케이션용 고성능 분산 메모리 개체 캐싱 시스템입니다. 짐. 데이터베이스 읽기 횟수를 줄이기 위해 데이터와 개체를 메모리에 캐시함으로써 동적 데이터베이스 기반 웹사이트의 속도를 향상시킵니다. 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'"); }
구현을 살펴보세요.
종료하고 "구현"을 클릭하세요. 멤캐시드 "다시 캐시"
캐시를 1분 내에 설정했기 때문에 이 인터페이스는 항상 이 분 내에 있게 됩니다. memcached는 여전히 훌륭하다고 말씀드리고 싶습니다. 다음으로 OutputCached + Monogodb
의 캐싱 전략을 연구하겠습니다.위 내용은 고성능 캐싱 시스템(Memcached) 도입 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!