国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

緩存技術及在Rainbow Portal的應用

2024-07-21 02:28:19
字體:
來源:轉載
供稿:網友

  1. asp.net緩存技術概述

  將數據庫中的數據緩存到內存(也可以存儲在其他場所),則無需在請求每個頁面時都訪問數據庫。由于從內存中返回數據的速度始終比新提供的數據速度快,因而可以大大提高應用程序的性能。

  asp.net為你使用緩存技術提供最大的靈活性,你可以緩存整個html頁面,或是部分html頁面,或是各種對象。你可以設置過期策略,或是設置依賴性,即在其他資源如文件或數據庫表改變時,自動移出緩存。

  asp.net中有兩種基本的緩存:

  輸出緩存

  頁面輸出緩存是最為簡單的緩存機制,該機制將整個asp.net頁面內容保存在服務器內存中。當用戶請求該頁面時,系統從內存中輸出相關數據,直到緩存數據過期。在這個過程中,緩存內容直接發送給用戶,而不必再次經過頁面處理生命周期。通常情況下,頁面輸出緩存對于那些包含不需要經常修改內容的,但需要大量處理才能編譯完成的頁面特別有用。需要注意的是,頁面輸出緩存是將頁面全部內容都保存在內存中,并用于完成客戶端請求。

  可以通過在web.config進行配置,設置緩存策略,在一組asp.net頁面中使用。還可以通過httpcachepolicy類編程性設置頁面緩存。

  數據緩存

  應用程序數據緩存提供了一種編程方式,可通過鍵/值對將任意數據存儲在內存中。使用應用程序緩存與使用應用程序狀態類似。但是,與應用程序狀態不同的是,應用程序數據緩存中的數據是易失的,即數據并不是在整個應用程序生命周期中都存儲在內存中。應用程序數據緩存的優點是由asp.net管理緩存,它會在項過期、無效,或內存不足時移除緩存中的項,還可以配置應用程序緩存,以便在移除項時通知應用程序。

  同時還有兩種特殊的緩存,基于以上的緩存模型:

  部分緩存

  部分緩存本質上是輸出緩存。顧名思義,頁面部分緩存是將頁面部分內容保存在內存中以便響應用戶請求,而頁面其他部分內容則為動態內容。頁面部分緩存的實現包括兩種方式:控件緩存和替換后緩存。前者也可稱為片段緩存,這種方式允許將需要緩存的信息包含在一個用戶控件內,然后,將該用戶控件標記為可緩存的,以此來緩存頁面輸出的部分內容。這一方式緩存了頁面中的特定內容,而沒有緩存整個頁面,因此,每次都需重新創建整個頁。例如,如果要創建一個顯示大量動態內容(如股票信息)的頁,其中有些部分為靜態內容(如每周總結),這時可以將靜態部分放在用戶控件中,并允許緩存這些內容。緩存后替換與控件緩存正好相反。這種方式緩存整個頁,但頁中的各段都是動態的。例如,如果要創建一個在規定時間段內為靜態的頁,則可以將整個頁設置為進行緩存。如果向頁添加一個顯示用戶名的label控件,則對于每次頁刷新和每個用戶而言,label的內容都將保持不變,始終顯示緩存該頁之前請求該頁的用戶的姓名。使用緩存后替換機制,可以將頁配置為進行緩存,將頁的個別部分標記為不可緩存。在此情況下,可以向不可緩存部分添加label控件,這樣將為每個用戶和每次頁請求動態創建這些控件。

  數據源緩存

  數據源緩存是指在數據源控件如sqldatasource, objectdatasource, and xmldatasource中緩存數據,實際上是數據緩存,只不過緩存由控件內部實現。

  緩存依賴

  緩存依賴允許緩存項依賴于另外一個資源,這樣資源變化時,緩存項自動移出。

  asp.net包括3種依賴類型

  依賴于其他緩存項

  依賴于文件或文件夾

  依賴于數據庫查詢。

  另外你還可以使用聚合依賴,或是自定義緩存依賴。

  緩存功能也有其自身的不足。例如,顯示的內容可能不是最新、最準確的,為此,必須設置合適的緩存策略。緩存增加了系統的復雜性并使其難于測試和調試,你設置的斷點、監控變量等由于緩存在調試時都可能無效。

  2. rainbow portal中的數據緩存

  rainbow portal的portal、頁面、模塊的配置信息、頁面布局、主題等信息全部保存到數據庫里,若是每次從數據據庫讀取,就會影響性能。rainbow自此處理上使用了數據緩存技術。

  兩個輔助類:

  rainbow.framework.settings.cache.key 實現緩存鍵名的獲取,其方法都是靜態的。由于rainbow一個網站可以包含多個portal,每個portal都有獨立的設置,因此緩存的鍵名要區分不同的portal。key類為鍵名每個加上portal的別名作為前綴。

  如獲取portal配置信息的鍵名:

  public static string portalsettings()
  {
  return string.concat(portal.uniqueid, "_portalsettings");
  }
  rainbow.framework.settings.cache.currentcache類封裝對當前緩存的操作。
  rainbow.framework.site.configuration命名空間中的portalsettings類,pagesettings類,modulesettings類;rainbow.framework.design命名空間中的layoutmanager類,thememanager類等,都應用了緩存技術。一般過程為:先判斷當前的cache里有沒有緩存值,若有則從緩存中直接讀取,若沒有就從數據庫中讀取,然后保存到當前緩存中。
  以portalsettings類為例說明:
  public class portalsettings
  {
  ......
  public static hashtable getportalbasesettings(string portalpath)
  {
  hashtable _basesettings;
  if (!currentcache.exists(key.portalbasesettings()))
  {
  //從數據庫里讀取
  ......
  保存到緩存中
  cachedependency settingdependencies =
  new cachedependency(
  new string[]
  {
  layoutmanager.path,
  layoutmanager.portallayoutpath,
  thememanager.path,
  thememanager.portalthemepath
  });
  using (settingdependencies)
  {
  currentcache.insert(key.portalbasesettings(), _basesettings, settingdependencies);
  }
  }
  else
  {
  _basesettings = (hashtable)currentcache.get(key.portalbasesettings());
  }
  return _basesettings;
  }
  }
  針對緩存移除的問題,rainbow一方面采用了緩存依賴自動移除,如上述代碼中的settingdependencies,另外一方面在程序中顯式移出,如在portalsettings類中,當更改portal配置后,就移除緩存:

  public static void updateportalsetting(int portalid, string key, string value)
  {
  //更新
  ....
  currentcache.remove(key.portalsettings());
  }
  rainbow portal的一些模塊中,也用到了緩存技術,但有些存在一定問題,如whosloggedon模塊中也使用了數據緩存,但是并沒有通過rainbow.framework.settings.cache.key類實現緩存鍵名的獲取,這樣在一個站點存在多個portal的時候,站點的統計數會出現不正確的情況。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 托克逊县| 璧山县| 泰和县| 泉州市| 时尚| 唐海县| 晋宁县| 达州市| 吉林省| 襄城县| 汽车| 深州市| 江城| 漯河市| 莱芜市| 绥滨县| 察隅县| 沙雅县| 泽普县| 九龙城区| 澎湖县| 来凤县| 海门市| 八宿县| 抚顺县| 西昌市| 阿尔山市| 慈溪市| 淮南市| 蒲城县| 金溪县| 朝阳区| 宜兰县| 图木舒克市| 温宿县| 湖北省| 城市| 四平市| 商河县| 汕头市| 大埔县|