Heim >Backend-Entwicklung >C#.Net-Tutorial >Beispielhafte Einführung eines Hochleistungs-Caching-Systems (Memcached)

Beispielhafte Einführung eines Hochleistungs-Caching-Systems (Memcached)

零下一度
零下一度Original
2017-06-23 15:05:222099Durchsuche

Entitätstypen in Memcached können nicht ohne Serialisierung zwischengespeichert werden, daher müssen die Entitätsklassen verarbeitet werden, bevor sie zwischengespeichert werden können

Memcached ist ein leistungsstarkes verteiltes In -Speicherobjekt-Caching-System für dynamische Webanwendungen zur Reduzierung der Datenbanklast. Es verbessert die Geschwindigkeit dynamischer, datenbankgesteuerter Websites, indem es Daten und Objekte im Speicher zwischenspeichert, um die Anzahl der Datenbanklesevorgänge zu reduzieren. Memcached basiert auf einer Hashmap, die Schlüssel/Wert-Paare speichert. Sein Daemon ist in C geschrieben, aber der Client kann in jeder beliebigen Sprache geschrieben sein und kommuniziert mit dem Daemon über das Memcached-Protokoll.

Wir können Memcached verwenden, um Zeichenfolgentypen und andere Typen, die intern serialisiert wurden, zwischenzuspeichern. Unsere benutzerdefinierten Typen können wir jedoch nicht in Memcached zwischenspeichern, da Memcached nur serialisierte Daten zwischenspeichern kann. Daher serialisieren wir sie hier Erstellen Sie einen benutzerdefinierten Entitätstyp und speichern Sie ihn in Memcached.

Laden Sie zuerst Memcached unter der Windows-Plattform herunter und installieren Sie es dann. Starten Sie nach der Installation den Memcached-Dienst. Sie können den Befehl dos unter cmd eingeben oder den Dienst unter Computerverwaltung->Dienst->memcached->Start starten.

Führen Sie dann die relevanten DLLs ein das Projekt:
Commons.dll, ICSharpCode.SharpZipLib.dll, log4net.dll, Memcached.ClientLibrary.dll
Fügen Sie Memcached.ClientLibrary.dll in die Referenz des Projekts ein

Folgen Sie dann Nach dem Schreiben Erstellen Sie für das Programm hier ein MVC-Programm:
Erstellen Sie eine Klasse im Ordner „Modelle“:

[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; }
}

Wenn sie nicht als serialisierbar markiert ist, führen Sie das Programm später aus. Ein Fehler wird gemeldet.

Erstellen Sie dann eine MemcachedHelper-Klasse, um die Programmierung zu unterstützen

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);
}

}

Zuletzt die spezifische Implementierung im Controller:

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;");
        }

Sehen Sie sich die Implementierung an:

Dann beenden Sie den Vorgang und klicken Sie erneut auf „Memcached-Cache implementieren“

Ich habe den Cache innerhalb einer Minute gesetzt, daher wird es diese Schnittstelle immer innerhalb dieser Minute geben. Ich muss sagen, dass memcached immer noch gut ist! Als nächstes werden wir die Caching-Strategie von OutputCached + Monogodb untersuchen

Das obige ist der detaillierte Inhalt vonBeispielhafte Einführung eines Hochleistungs-Caching-Systems (Memcached). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn