高效能緩衝系統(Memcached)的執行個體介紹

來源:互聯網
上載者:User
在Memcached中實體類型未經序列化不能在Memcached中緩衝,因此需要對實體類進行處理,才能緩衝下來.

Memcached是一個高效能的分布式記憶體對象緩衝系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中快取資料和對象來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。Memcached基於一個儲存鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是用戶端可以用任何語言來編寫,並通過memcached協議與守護進程通訊。

我們可以使用Memcached緩衝string類型等已經內部實現了序列化的類型,但是對於我們自訂的類型,我們並不能在Memcached中緩衝下來,因為Memcached只能緩衝序列化之後的資料,因此,在這裡我們將自訂的實體類型序列化一下就可以在Memcached中儲存了。

首先下載windows平台下的memcached,然後安裝。安裝完之後就是啟動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);}}

最後就是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("若顯示則有'bug'");        }

看看實現:

然後退出來,重新點擊”實現memcached緩衝”

我設定了一分鐘之內的緩衝,因此在這一分鐘之內將一直是這個介面,不得不說memcached還是不錯!後續接著研究OutputCached + Monogodb的緩衝策略

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.