Maison  >  Article  >  développement back-end  >  Exemple d'introduction d'un système de mise en cache haute performance (Memcached)

Exemple d'introduction d'un système de mise en cache haute performance (Memcached)

零下一度
零下一度original
2017-06-23 15:05:221997parcourir

Les types d'entités dans Memcached ne peuvent pas être mis en cache dans Memcached sans être sérialisés, les classes d'entités doivent donc être traitées avant de pouvoir être mises en cache

Memcached est un In distribué hautes performances. -Système de mise en cache d'objets mémoire pour les applications Web dynamiques afin de réduire la charge de la base de données. Il améliore la vitesse des sites Web dynamiques basés sur des bases de données en mettant en cache les données et les objets en mémoire afin de réduire le nombre de lectures de la base de données. Memcached est basé sur une hashmap qui stocke les paires clé/valeur. Son démon est écrit en C, mais le client peut être écrit dans n'importe quel langage et communique avec le démon via le protocole memcached.

Nous pouvons utiliser Memcached pour mettre en cache les types de chaînes et d'autres types qui ont été sérialisés en interne, mais pour nos types personnalisés, nous ne pouvons pas les mettre en cache dans Memcached car Memcached ne peut mettre en cache que les données sérialisées. type d'entité personnalisé et stockez-le dans Memcached.

Téléchargez d'abord Memcached sous la plateforme Windows, puis installez-le. Après l'installation, démarrez le service memcached. Vous pouvez entrer la commande dos sous cmd, ou vous pouvez démarrer le service dans Gestion de l'ordinateur->Service->memcached->Démarrer.

Ensuite, introduisez les DLL pertinentes dans le projet :
Commons.dll, ICSharpCode.SharpZipLib.dll, log4net.dll, Memcached.ClientLibrary.dll
Introduisez Memcached.ClientLibrary.dll dans la référence du projet

Puis suivez Après l'écriture le programme, créez un programme MVC ici :
Créez une classe dans le dossier Modèles :

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

S'il n'est pas marqué comme sérialisable, exécutez le programme plus tard. sera signalé.

Créez ensuite une classe MemcachedHelper pour aider à la programmation

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

}

Enfin, l'implémentation spécifique dans le 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;");
        }
Regardez l'implémentation :

Puis quittez et cliquez à nouveau sur "Implémenter le cache Memcached"

J'ai défini le cache en une minute, donc ce sera toujours cette interface dans cette minute. Je dois dire que memcached est toujours bon ! Ensuite, nous étudierons la stratégie de mise en cache de OutputCached + Monogodb

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn