文件和缓存项目依赖
文件和緩存項目依賴
?????? 要創(chuàng)建緩存依賴,你需要創(chuàng)建一個 CacheDependency 對象并在添加依賴的緩存項目時使用它。例如,下面的代碼創(chuàng)建一個緩存項目,它在一個 XML 文件被修改、刪除、覆蓋時自動從緩存中移除:
CacheDependency prodDependency = new CacheDependency(Server.MapPath("ProductList.xml")); Cache.Insert("ProductInfo", prodInfo, prodDependency);
?CacheDependency 還有一個構(gòu)造函數(shù),接收一個文件名的數(shù)組和一個緩存鍵值的數(shù)組。下面這個示例使用該構(gòu)造函數(shù)創(chuàng)建了一個依賴于緩存中其他項目的項目:
Cache["Key1"] = "Cache Item 1";string[] dependencyKey = new string[1]; dependencyKey[0] = "Key2"; CacheDependency dependency = new CacheDependency(null, dependencyKey);Cache.Insert("Key2", "Cache Item 2", dependency);
? ? ? ?此后,當(dāng) Cache["Key1"] 發(fā)生變化或從緩存中移除時,Cache["Key2"] 就會被自動移除。
聚合依賴
?????? 有時你可能會希望組合多個依賴創(chuàng)建一個項目,它依賴多個其他資源。例如,它在 3 個文件中的任意一個發(fā)生變化時就無效等等。
?????? 使用 AggregateCacheDependency 可以包含任意多個 CacheDependency 對象。你所需要做的只是使用 AggregateCacheDependency .Add()方法提供一個 CacheDependency 對象的數(shù)組。
?????? 下面這個示例使一個緩存項目依賴于兩個文件:
CacheDependency dep1 = new CacheDependency(Server.MapPath("ProductList1.xml")); CacheDependency dep2 = new CacheDependency(Server.MapPath("ProductList2.xml"));CacheDependency[] deps = new CacheDependency[] { dep1, dep2 }; AggregateCacheDependency aggregateDep = new AggregateCacheDependency(); aggregateDep.Add(deps);Cache.Insert("ProductInfo", prodInfo, aggregateDep);
?
如何設(shè)置HttpRuntime.Cache的有效期
//添加到文件依賴緩存 System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency(xmlname); HttpRuntime.Cache.Insert(cachename, data, dep);//添加絕對過期時間 DateTime absExpireTime = DateTime.Now.AddSeconds(3600); HttpRuntime.Cache.Insert(cacheName, data, null, absExpireTime, TimeSpan.Zero);
?
個人應(yīng)用:
public class AppReturnMsg{public GloablMsg msg;public GloablMsg Msg{get{if (msg == null || msg.MsgType <= 0){GlobalMsgList msglist;string fileFullName = AppDomain.CurrentDomain.BaseDirectory + "/App_Data/" + "GlobalMsgConfig.xml";object obj = HttpRuntime.Cache["GlobalMsg"];if (obj == null){msglist = XmlHelper.XmlToObj<GlobalMsgList>(fileFullName); //從XML獲取數(shù)據(jù)//緩存文件內(nèi)容HttpRuntime.Cache.Insert("GlobalMsg", msglist, new System.Web.Caching.CacheDependency(fileFullName));}else{msglist = obj as GlobalMsgList;}if (msglist != null){string path = "";if (HttpContext.Current != null){path = HttpContext.Current.Request.Path; //gateway/QueryReCategoryBrands }msg = msglist.MsgItem.FirstOrDefault(t => String.Equals(t.Path, path, StringComparison.CurrentCultureIgnoreCase));}}return msg;}set { msg = value; }}}[XmlRoot("GlobalMsg")]public class GlobalMsgList{[XmlElement("MsgItem")]public List<GloablMsg> MsgItem { get; set; }}[DataContract] [Serializable]public class GloablMsg{[IgnoreDataMember][XmlElement("Path")]public string Path { get; set; }[DataMember] [XmlElement("MsgType")]public int MsgType { get; set; }[DataMember] [XmlElement("Redirect")]public string Redirect { get; set; }[DataMember] [XmlElement("Content")]public string Content { get; set; }[DataMember] [XmlElement("Title")]public string Title { get; set; }}
<?xml version="1.0" encoding="utf-8" ?> <GlobalMsg><MsgItem><Path>/json/reply/Test</Path> <MsgType>1</MsgType><!--1頭部廣告條,2確認彈窗,3提示彈窗,4自動消失,5Picture,6寶貝幣,10強制跳轉(zhuǎn)--><Redirect>www.baidu.com</Redirect><Content>測試內(nèi)容關(guān)于廣告內(nèi)容1</Content><Title>測試配置文件第一個</Title></MsgItem><MsgItem><Path>/gateway/QueryReCategoryBrands</Path><MsgType>1</MsgType><Redirect>www.baidu.com</Redirect><Content>測試內(nèi)容關(guān)于廣告內(nèi)容2</Content><Title>測試配置文件第一個</Title></MsgItem> </GlobalMsg>
?
?
[System.Web.Mvc.HttpGet]public JsonResult GetMenu(){List<BigMenu> menuList = new List<BigMenu>();try{string filePath = Path.Combine(HttpContext.Server.MapPath("~/"), Menufilename);object obj = HttpRuntime.Cache["MenuList"];if (obj == null){XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(filePath);XmlNode NarBarXmlNode = xmlDoc.SelectSingleNode("//NavBar");XmlNodeList xmlNodeList = NarBarXmlNode.ChildNodes;if (xmlNodeList != null && xmlNodeList.Count > 0){foreach (XmlNode xmlnode in xmlNodeList){string itemtext = xmlnode.Attributes["Name"].Value; //一級菜單int count = 0;//獲取當(dāng)前結(jié)點的子節(jié)點//Dictionary<string, string> smallmenu = new Dictionary<string, string>();List<SmallMenu> smMunuList = new List<SmallMenu>();foreach (XmlNode childxmlnode in xmlnode.ChildNodes){string childitemtext = childxmlnode.Attributes["Name"].Value; //二級菜單頁面名稱string childitemsrc = childxmlnode.Attributes["Src"].Value; //二級菜單頁面跳轉(zhuǎn)路徑if (FormUser.UserInfo.ArrRightList.Contains(childitemtext)) //判斷是否包含權(quán)限 {SmallMenu smMenu = new SmallMenu();smMenu.SmallMenuName = childitemtext.Replace("PSS", "");smMenu.MenuSrc = childitemsrc;smMunuList.Add(smMenu);count++;}}if (count > 0){BigMenu bgMenu = new BigMenu();bgMenu.BigMenuName = itemtext;bgMenu.smobj = smMunuList;menuList.Add(bgMenu);}}}//緩存文件內(nèi)容HttpRuntime.Cache.Insert("MenuList", menuList, new System.Web.Caching.CacheDependency(filePath));}else{menuList = obj as List<BigMenu>;}return Json(new{Status = "OK",Menu = menuList//(new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(menuList) }, JsonRequestBehavior.AllowGet);}catch{return Json(new{Status = "Fail",Menu = menuList//(new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(menuList) }, JsonRequestBehavior.AllowGet);}}
?
轉(zhuǎn)載于:https://www.cnblogs.com/shy1766IT/p/5464059.html
總結(jié)
- 上一篇: 什么衣服能魔法造型
- 下一篇: 求一个押韵个性签名。