asp.net SAF 中緩存服務的實現(xiàn)第4/5頁
更新時間:2008年08月08日 21:28:49 作者:
對緩存的興趣源于張子陽寫的一篇文章《SAF 中緩存服務的實現(xiàn)》中的一個例子:
最后的兩個方法,GetItem()和GetList()分別用于從緩存中獲取單個或者多個對象。值得注意的是當使用GetList()方法時,Xpath應該為到達一個組結點的路徑。
復制代碼 代碼如下:
// 根據(jù) XPath 獲取對象
// 先根據(jù)Xpath獲得對象的Key,然后再根據(jù)Key獲取實際對象
public virtual object GetItem(string xpath) {
object obj = null;
xpath = PrepareXPath(xpath);
XmlNode node = rootMap.SelectSingleNode(xpath);
if (node != null) {
// 獲取對象的Key
string key = node.Attributes["key"].Value;
// 獲取實際對象
obj = cacheStrategy.GetItem(key);
}
return obj;
}
// 獲取一組對象,此時xpath為一個組結點
public virtual object[] GetList(string xpath) {
xpath = PrepareXPath(xpath);
XmlNode group = rootMap.SelectSingleNode(xpath);
// 獲取該結點下的所有子結點(使用[@key]確保子結點一定包含key屬性)
XmlNodeList results = group.SelectNodes(xpath + "/*[@key]");
ArrayList objects = new ArrayList();
string key;
foreach (XmlNode result in results) {
key = result.Attributes["key"].Value;
Object obj = cacheStrategy.GetItem(key);
objects.Add(obj);
}
return (object[])objects.ToArray(typeof(object));
}
至此,SAF 的緩存服務的設計和代碼實現(xiàn)都完成了,現(xiàn)在我們來看看如何使用它。
程序測試
復制代碼 代碼如下:
static void Main(string[] args) {
CacheService.Cache cache = CacheService.Cache.Instance;
// 添加對象到緩存中
cache.AddItem("/WebApplication/Users/Xin", "customer xin");
cache.AddItem("/WebApplication/Users/Jimmy", "customer jimmy");
cache.AddItem("/WebApplication/Users/Steve", "customer other");
cache.AddItem("/WebApplication/GlobalData", "1/1/2008");
cache.AddItem("/Version", "v10120080401");
cache.AddItem("/Site", "TraceFact.Net");
// 獲取所有User
object[] objects = cache.GetList("/WebApplication/Users");
foreach (object obj in objects) {
Console.WriteLine("Customer in cache: {0}", obj.ToString());
}
// 刪除所有WebApplication下所有子孫結點
cache.RemoveItem("/WebApplication");
// 獲取單個對象
string time = (string)cache.GetItem("/WebApplication/GlobalData");
string name = (string)cache.GetItem("/WebApplication/Users/Xin");
Console.WriteLine("Time: {0}", time);// 輸出為空,WebApplication下所有結點已刪除
Console.WriteLine("User: {0}", name);// 輸出為空, WebApplication下所有結點已刪除
// 獲取根目錄下所有葉結點
objects = cache.GetList("/");
foreach (object obj in objects) {
Console.WriteLine("Object: {0}", obj.ToString());
}
Console.ReadLine();
}
輸出的結果為:
Customer in cache: customer xin
Customer in cache: customer jimmy
Customer in cache: customer other
Time:
User:
Object: v10120080401
Object: Trace
相關文章
ASP.NET實現(xiàn)TreeView的XML數(shù)據(jù)源綁定實例代碼
這篇文章介紹了ASP.NET實現(xiàn)TreeView的XML數(shù)據(jù)源綁定實例代碼,有需要的朋友可以參考一下2013-11-11
ASP.NET堆和棧二之值類型和引用類型的參數(shù)傳遞和內存分配
這篇文章介紹了ASP.NET堆和棧中值類型和引用類型的參數(shù)傳遞和內存分配,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
如何在ASP.NET Core中給上傳圖片功能添加水印實例代碼
這篇文章主要給大家介紹了關于如何在ASP.NET Core中給上傳圖片功能添加水印的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-02-02
asp.net core webapi項目配置全局路由的方法示例
這篇文章主要介紹了asp.net core webapi項目配置全局路由的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09

