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

首頁 > 編程 > .NET > 正文

ASP.NET 2.0實現依賴Oracle的緩存策略

2024-07-10 13:09:51
字體:
來源:轉載
供稿:網友
  asp.net 2.0中的緩存提供了對sql依賴項的支持,也就是說當sql server數據庫中的表或行中的數據被更改后,緩存中的頁面就失效,否則,頁面輸出可一直保留在緩存當中。這確實為程序員提供了方便。但微軟一向很小家子氣,只為使用自家產品sql server的程序員提供了方便,那些用oracle數據庫的asp.net程序員怎么辦呢?

  其實不用著急,因為asp.net 2.0中的緩存還提供了對文件依賴項的支持,也就是緩存依賴于某個文件,該文件被修改后,緩存中的頁面就失效。只要巧妙利用asp.net 2.0的文件依賴項緩存策略和oracle中的觸發器,就可輕松實現依賴oracle的緩存策略。思路很簡單,先將頁面的緩存策略設置為依賴某一個文件,再為oracle中需要依賴的表添加一個觸發器,當表中的數據被更改時,修改緩存所依賴的文件中的內容。

  下面以一個小例子來具體說明:

  試驗目的:default.aspx頁面的緩存依賴于oracle數據庫中scott用戶的dept表,該表中數據被更改后,緩存中的頁面失效。緩存的過期時間為120秒。

  一、設置網站頁面的緩存依賴于文件textfile.txt

  1、打開visual studio 2005,在e:/csharp/cachebyoracledependncy目錄下新建一個web項目,在其default.aspx頁面上添加一個label控件,顯示頁面生成的時間,以判斷刷新時頁面是否為重新生成的,并設置頁面緩存依賴于文件e:/csharp/cachebyoracledependncy/textfile.txt。

protected void page_load(object sender, eventargs e)
{
 //顯示當前時間,以便判斷是否為緩存中頁面
 this.label1.text = "cachebyoracledependency:" + datetime.now.tostring();
 //緩存依賴于文件textfile.txt
 string filedependencypath = server.mappath("textfile.txt");
 response.addfiledependency(filedependencypath);
 // 設置緩存的過期時間為120秒。
 response.cache.setexpires(datetime.now.addseconds(120));
 response.cache.setcacheability(httpcacheability.public);
 response.cache.setvaliduntilexpires(true);
}

  2、在e:/csharp/cachebyoracledependncy目錄下新建一個textfile.txt文件。

  二、在oracle數據庫中創建觸發器

  1、觸發器被觸發時執行pl/sql代碼塊。pl/sql代碼塊直接讀寫操作系統中的文件,需調用內置的utl_file程序包。這需要先修改oracle的初始化參數文件init.ora,在其中添加參數utl_file_dir,來指定文件的目錄。修改init.ora文件后,需重啟oracle數據庫,設置的參數才能生效。

  在init.ora文件中添加下面一行內容:

  utl_file_dir='e:/csharp/cachebyoracledependncy'

  也可以設置為utl_file_dir=*,不指定具體目錄,即任何目錄都可以。

  如果是oracle 9i數據庫,還有一種方法也能起到同樣的作用:在sys用戶下創建一個directory目錄(實際上是在sys用戶下的dir$表中增加一個對應的os_path),然后將對該directory對象的讀/寫操作的權限grant給public。

  create or replace directory filepath as 'e:/csharp/cachebyoracledependncy';

  grant read on directory filepath to public;

  這里我使用的是第二種方法。

  2、為所依賴的表(scott用戶的dept表)創建一個觸發器:當dept表中的數據更改后,觸發器就會將當前系統時間寫入textfile.txt文件中。

create or replace trigger
"scott"."test_cache_by_oracle_dependncy" after
insert
or update
or delete of "deptno", "dname", "loc" on "scott"."dept" declare
file_handle utl_file.file_type;
begin
--打開文件
file_handle := utl_file.fopen('filepath','textfile.txt','w');
--將當前系統時間寫入文件
if utl_file.is_open(file_handle) then
 utl_file.put_line(file_handle,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
end if;
--關閉文件
utl_file.fclose(file_handle);
exception
when others then
begin
 if utl_file.is_open(file_handle) then
  utl_file.fclose(file_handle);
 end if;
exception
 when others then
  null;
 end;
end;

  三、測試

  前面兩步完成后,依賴oracle的緩存策略就設置好了。只要dept表中的數據更改后,觸發器就會修改textfile.txt文件中的內容,textfile.txt文件一被修改,緩存中的頁面就自動失效了,再次訪問頁面時,請求就會發給服務器,來重新生成頁面。

  在visual studio 2005中調試程序,不斷刷新打開的default.aspx頁面,頁面顯示的時間每隔120秒,才會發生變化一次。這是因為設置的緩存過期時間為120秒。這時,只要我們手工修改scott用戶的dept表中的數據后,再次刷新頁面時,頁面上顯示的時間馬上就會發生變化。這說明我們設置的依賴oracle的緩存策略成功了。

最大的網站源碼資源下載站,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿勒泰市| 仪陇县| 宿松县| 萍乡市| 德江县| 墨竹工卡县| 安远县| 黄骅市| 乐清市| 郴州市| 佛学| 中卫市| 山阴县| 吴桥县| 龙里县| 昌邑市| 陆川县| 九江市| 九龙县| 通渭县| 鄂伦春自治旗| 聊城市| 桂林市| 新河县| 博爱县| 娱乐| 阜宁县| 荥经县| 汝州市| 宁乡县| 故城县| 濉溪县| 武邑县| 石泉县| 施秉县| 资兴市| 栾川县| 鹤峰县| 基隆市| 长丰县| 长丰县|