您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)高性能緩存系統(tǒng)Memcached怎么用的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在Memcached中實體類型未經(jīng)序列化不能在Memcached中緩存,因此需要對實體類進行處理,才能緩存下來.
Memcached是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提高動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。Memcached基于一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護進程通信。
我們可以使用Memcached緩存string類型等已經(jīng)內(nèi)部實現(xiàn)了序列化的類型,但是對于我們自定義的類型,我們并不能在Memcached中緩存下來,因為Memcached只能緩存序列化之后的數(shù)據(jù),因此,在這里我們將自定義的實體類型序列化一下就可以在Memcached中存儲了。
首先下載windows平臺下的memcached,然后安裝。安裝完之后就是啟動memcached服務(wù)了,你可以在cmd下用dos命令輸入,也可以在計算機管理->服務(wù)->memcached->啟動.來開啟服務(wù).
隨后就是在項目中引入相關(guān)dll:
Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll
在項目的引用中引入Memcached.ClientLibrary.dll
隨后就是編寫程序了,在這里創(chuàng)建一個MVC程序:
在Models文件夾中創(chuàng)建一個類:
[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; } }
若沒有標注為可序列化,則后續(xù)運行程序?qū)箦e。
隨后創(chuàng)建一個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里面的具體實現(xiàn):
public class EntityMemcachedController : Controller { // // GET: /EntityMemcached/ /// <summary> /// 序列化實體類為字節(jié)數(shù)組,將其存儲到Memcached中,以緩存數(shù)據(jù),從而減輕訪問壓力.... /// </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);//設(shè)置cookie過期時間 MemcachedHelper.set(sessionId, vipInfo, DateTime.Now.AddMinutes(1));//設(shè)置緩存過期時間 return Content("Memcached分布式緩存設(shè)置成功!??!"); } 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'"); }
看看實現(xiàn):
然后退出來,重新點擊”實現(xiàn)memcached緩存”
我設(shè)置了一分鐘之內(nèi)的緩存,因此在這一分鐘之內(nèi)將一直是這個界面,不得不說memcached還是不錯!
感謝各位的閱讀!關(guān)于“高性能緩存系統(tǒng)Memcached怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。