>  기사  >  백엔드 개발  >  고성능 캐싱 시스템(Memcached) 도입 사례

고성능 캐싱 시스템(Memcached) 도입 사례

零下一度
零下一度원래의
2017-06-23 15:05:222067검색

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("若显示则有&#39;bug&#39;");
        }

구현을 살펴보세요.

종료하고 "구현"을 클릭하세요. 멤캐시드 "다시 캐시"

캐시를 1분 내에 설정했기 때문에 이 인터페이스는 항상 이 분 내에 있게 됩니다. memcached는 여전히 훌륭하다고 말씀드리고 싶습니다. 다음으로 OutputCached + Monogodb

의 캐싱 전략을 연구하겠습니다.

위 내용은 고성능 캐싱 시스템(Memcached) 도입 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.