當前位置:首頁 » 文件管理 » 放入緩存之後還能改參數嗎

放入緩存之後還能改參數嗎

發布時間: 2022-10-10 18:11:10

㈠ .net帶有參數的頁面怎麼進行緩存,緩存後可瀏覽正確頁面

ASP.NET 提供三種主要形式的緩存:頁面緩存、用戶控制項輸出緩存和緩存 API。

頁面輸出緩存作為最簡單的緩存形式,將已經生成的動/靜太頁面全部內容保存在伺服器內容中。當再有請求時,系統將緩存中的相關數據直接輸出,直到緩存數據過期。在這個過程中,緩存不再要再次經過頁面處理生命周期。這樣可以縮短請求響應時間,提高應用程序性能。顯然,頁面輸出緩存適用於不需要頻繁更新數據,而佔用大量時間和資源才能編譯生成的頁面。

實現頁面輸出緩存,通常可以用以下兩種方法:

一、使用@ OutputCache指令

使用@ OutputCache指令,能夠實現對頁面輸出緩存的一般性需要。@ OutputCache指令在ASP.NET頁或者頁中包含的用戶控制項的頭部聲明。這種方式非常方便,只需幾個簡單的屬性設置,就能夠實現頁面的輸出緩存策略。

二、使用HttpCacheability類

該類主要包含用於設置緩存特定的HTTP標頭的方法和用於控制ASP.NET頁面輸出緩存的方法。與.NET Framework 1.x中的HttpCachePolicy類相比,.NET Framework 2.0中的HttpCachePolicy類得到了擴充和發展。

使用這兩種方法,我們可以實現下列功能:

1、使用參數對頁的各個版本進行緩存

使用 ASP.NET,您可以根據指定的 HTTP 標頭的值對某頁的多個版本進行緩存。當請求頁時,您可以指定按傳遞到應用程序的單個標頭、多個標頭或所有標頭進行緩存。

根據 HTTP 標頭值以聲明方式對某頁的各個版本進行緩存

A、 在 ASP.NET 頁中,在 @ OutputCache 指令中包括必需的 Duration 和 VaryByParam 或 VaryByControl 屬性。必須將 Duration 屬性設置為大於零的整數。如果希望只按 HTTP 標頭值進行緩存,則必須將 VaryByParam 屬性設置為「None」。

B、 在 @ OutputCache 指令中,包含 VaryByHeader 屬性,將其值設置為要作為改變緩存內容的依據的 HTTP 標頭的名稱。

下面的示例將頁緩存 60 秒,並根據隨 Accept-Language HTTP 標頭傳遞的值設置要緩存的頁的版本:

<%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>

注意:如果要根據多個標頭改變緩存的內容,請以分號 (;) 作為分隔符包括標頭名稱的列表。如果要根據所有標頭值改變緩存的內容,請將 VaryByHeader 屬性設置為星號 (*)。

根據 HTTP 標頭值以編程方式對某頁的各個版本進行緩存

A、 在頁的 Page_Load 方法中,對頁的 Response 對象的 Cache 屬性調用 SetCacheability 和 SetExpires 方法。

B、 將 VaryByHeaders 屬性中的 HTTP 標頭值設置為 true。

下面的代碼示例演示如何為有不同的 Accept-Language HTTP 標頭值的請求,將某頁的多個版本緩存一分鍾之久。

protected void Page_Load(object sender, EventArgs e)

{

Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetValidUntilExpires(true);

Response.Cache.VaryByHeaders["Accept-Language"] = true;

}

注意:如果要根據多個標頭改變緩存的內容,需要在 VaryByHeaders 屬性中設置多個值。如果要根據所有標頭改變緩存的內容,請將 VaryByHeaders["VaryByUnspecifiedParameters"] 設置為 true。

2、使用請求瀏覽器緩存頁的各個版本

基於瀏覽器類型以聲明方式緩存頁的多個版本

A、 在 ASP.NET 頁中,包括一個具有必需的 Duration 以及 VaryByParam 或 VaryByControl 屬性的 @ OutputCache 指令。必須將 Duration 屬性設置為大於零的整數。如果希望僅按瀏覽器類型進行緩存,請將 VaryByParam 屬性設置為「None」。

B、 在 @ OutputCache 指令中,包括 VaryByCustom 屬性並將其設置為「browser」。下面的示例將導致持續緩存該頁達 10 秒。輸出將因瀏覽器類型而異。

<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser" %>

基於瀏覽器類型以編程方式緩存頁的多個版本

A、 在頁代碼中,對頁的 Response 屬性的 Cache 屬性調用 SetExpires 和 SetCacheability 方法。

B、 調用 SetVaryByCustom 方法,在 custom 參數中傳遞值「browser」。

下面的代碼示例演示如何持續緩存頁的多個版本達 1 分鍾。輸出將因發出請求的瀏覽器的類型而異。

protected void Page_Load(object sender, EventArgs e)

{

Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetValidUntilExpires(true);

Response.Cache.SetVaryByCustom("browser");

}

3、 使用自定義字元串對頁的各個版本進行緩存

根據自定義字元串對頁輸出的多個版本進行緩存

A、 在 ASP.NET 頁中包括 @ OutputCache 指令,該指令帶有必需的 Duration 和 VaryByParam 屬性。必須將 Duration 屬性設置為大於零的整數。如果不想使用 VaryByParam 屬性提供的功能,則必須將其值設置為「無」。

B、 若要以聲明方式設置自定義字元串,請在 @ OutputCache 指令中包括 VaryByCustom 屬性,並將該屬性設置為您要作為進行不同輸出緩存行為的依據的字元串。

下面的指令根據自定義字元串「minorversion」改變頁輸出。

<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="minorversion" %>

1. 若要以編程方式設置自定義字元串,請調用 SetVaryByCustom 方法,並將要使用的自定義字元串傳遞給它。

下面的代碼示例演示如何將自定義字元串設置為「minorversion」。

Response.Cache.SetVaryByCustom("minorversion");

在應用程序的 Global.asax 文件中,重寫 GetVaryByCustomString 方法以指定自定義字元串的輸出緩存行為。

被重寫的方法接受您在 VaryByCustom 屬性或 SetVaryByCustom 方法中設置的字元串,作為它的 arg 參數。例如,有些頁可能根據請求瀏覽器的次版本進行緩存。對於這些頁,可以將 VaryByCustom 屬性設置為「minorversion」。然後,在被重寫的 GetVaryByCustomString 方法中,可以檢查 arg 參數,並根據 arg 參數的值是否為「minorversion」返回不同的字元串。

下面的代碼示例演示一個 Global.asax 文件,其中的 GetVaryByCustomString 方法被重寫。

<%@ Application language="C#" %>

<script runat="server">

public override string GetVaryByCustomString(HttpContext context,

string arg)

{

if(arg == "minorversion")

{

return "Version=" +

context.Request.Browser.MinorVersion.ToString();

}

else

{

return "";

}

}

</script>

㈡ 火狐瀏覽器設置了緩存,但是打開cache發現其中的參數還是原來的地址

您好,感謝您對火狐的支持

在火狐瀏覽器地址欄輸入:about:cache,可以查看緩存,您具體要操作什麼內容呢,如果要從緩存讀取文件,建議還是在網頁上直接下載。
您可以在火狐官方網站下載火狐瀏覽器,在火狐社區了解更多內容。希望我的回答對您有所幫助,如有疑問,歡迎繼續在本平台咨詢。

㈢ 如何修改電腦配置參數和文件大小

一.修改我的電腦右鍵所看到的硬體信息(CPU和RAM)
工具:eXeScope
文件:%windir%\system32\sysdm.cpl
打開sysdm.cpl ,復制到別的地方操作,點"資源"-"對話框"-"101"
在中框看到有"Link Window" 字樣,共有9行
第3行到第6行"Link Window"全把"可見"的勾取消
第7行的坐標(X,Y)為(110,190)內容為: AMD CPU 自己想就好了
第8行的坐標(X,Y)為(110,200)內容為:3.3 GHz
第9行的坐標(X,Y)為(110,210)內容為:2048 MB 的內存
註:以上的坐標值根據你自己實際情況而定,只要能對其即可。
二.再來修改在dxdiag程序中顯示的硬體信息(CPU、aRAM、VGA)
工具:eXeScope
文件:%windir%\system32\dxdiag.exe
1. 打開dxdiag.exe ,復制到別的地方操作,點"資源"-"對話框"-"6201"-"中文(中國)"
找到中框的"Static:處理器:" 標題改為: AMD CPU 自己想就好了,參數(120,182,200)分別為(X,Y,寬度)下面不再作說明,把"Static:處理器:"下面的"Static:x"的"可見"的勾去掉,
2. 找到中框的"Static:內存:" 標題改為:"內存: 2048MB RAM" ,參數(55,195,140)和上面操作一樣,把 "Static:內存:" 下面的 "Static:x" 的 "可見" 的勾去掉
3. 找到中框的"Static:頁面文件:" 標題改為:"頁面文件: 8MB 已用,2040MB 可用" 附我參數(99,208,140)和上面操作一下,把 "Static:頁面文件:" 下面的 "Static:x" 的 "可見" 的勾去掉
4. 修改VGA信息:打開dxdiag.exe 點"資源"-"對話框"-"6203"-"中文(中國)",找到中框的"Static:名稱:" 標題改為:"名稱: NVIDIA GeForce FX 7800GS",在以上操作一樣把"Static:名稱:"下面的"Static:x" 的 "可見" 的勾去掉
5. 找到中框的"Static:製造商:" 標題改為:"製造商: NVIDIA",在以上操作一樣把"Static:製造商:"下面的"Static:x" 的 "可見" 的勾去掉
6. 找到中框的"Static:晶元類型:" 標題改為:"晶元類型: GeForce FX 7800GS",在以上操作一樣把"Static:晶元類型:"下面的"Static:x" 的 "可見" 的勾去掉
7. 找到中框的"Static:估計內存總數:" 標題改為:"估計內存總數: 1024.0 MB",在以上操作一樣把"Static:估計內存總數:"下面的"Static:x" 的 "可見" 的勾去掉。
三.替換方法:
接下來用修改後的文件替換原始文件。不過在替換過程中,又有新問題:文件保護功能會把替換的文件恢復 。要把修改後的sysdm.cpl,dxdiag.exe文件復制到C:Windows\System32中替換原文件有些麻煩——SP2強大的文件保護功能會自動還原原始文件。如果不禁用文件保護功能,藉助文件替換工具Replacer解決問題。雙擊「replace.cmd」出現命令提示符窗口,將C:Windows\System32\sysdm.cpl, C:Windows\System32\dxdiag.exe文件拖到其中,回車;再將修改過的sysdm.cpl, dxdiag.exe文件拖入其中並回車,輸入「Y」後按回車,這樣就能替換掉系統文件了(在彈出的Windows文件保護時請點「取消」)。
也有的電腦,即使使用以上方法也不管用,可能是以為系統版本的問題,在C:Windows\System32中還有一個文件夾叫做dllcatch裡面有一個sysdm.cpl文件把它也替換即可。
四.修改設備管理器里的硬體信息(CPU、VGA)工具:注冊表編輯器(regedit.exe)
1. 打開REGEDT 找到以下表項
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI\GenuineIntel_-_x86_Family_15_Model_4\_0]
右鍵點"_0"表項-許可權-添加……!上面的操作目的就是把當用操作用戶添加到許可權列表中要求要完全控制許可權,更改右框"FriendlyName"字元串的數值如下:
"FriendlyName"=" AMD CPU 自己想就好了"
2.找到以下表項
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI]下的表項的第一個表項(與系統有關,位置不定,自己找找),
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\VEN_10DE&DEV_0322&SUBSYS_00000000&REV_A1\4&299ccbfa&0&0008]
在右框能看到有你顯卡在設備管理器里顯示的設備名稱就對了,給4&299ccbfa&0&0008加入當前用戶許可權後更改鍵值如下:
"DeviceDesc"="NVIDIA GeForce FX 7800GS"
注意:如果修改注冊表文件之後,電腦重新啟動硬體信息有可能被還原,暫時我們沒有很好的辦法解決,只有借用一些外部手段,思路就是,每次電腦重新啟動的時候注冊表被恢復,在剛開機的時候我們讓系統自動導入注冊表文件,就可以達到開機後自動更改了。把你更改的注冊表文件導出為你想要的文件名(隨意),比如:2222.reg 用winrar創建自解壓模式,在高級選項中選擇解壓後運行,填入regedit /s 2222.reg 。在別的選項中選擇靜默安裝等一些自己需要的安裝方式即可。把這個自解壓文件放到開始--所有程序--啟動。這樣就可以解決問題了。
方法二
修改電腦屬性里的注冊信息
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
"ProctName"=Microsoft Windows 2000 {操作系統名}
"CurrentType"=5.0 {系統統版本號}
"CurrentBuildNumber"=2159
"RegisteredOrganization"=XX公司 {注冊時的組織名字}
"Registered Owner"=zhao {注冊時的用戶名稱}
"ProctId"=52273-270-0094787-09115 {注冊號}
還有個手動的辦法
1>打開你的記事本,在記事本里錄入如下內容:
[General]
Manufacturer=這里的文字可以自由發揮,想寫什麼寫什麼!
Model=想寫什麼都行,自由發揮,別太長!
[Support Information]
Line1="自由發揮,寫什麼都行"
Line2="同上"
Line3="同上"
注意:「line」行,可以再增加,雙引號別忘了加。
2>另存該文件為Oeminfo.ini,注意必須這么命名!
3>將該文件復制到c:\WinNT\system32文件夾下
可是單單這樣還不能實現圖片的功能繼續看
4>找個約180 X 110自己喜歡的點陣圖文件BMP將其命名為:Oemlogo.bmp 注意圖片名稱同樣也必須這么命名, 然後存儲到c:\WinNT\system32文件夾下 或者c:\WinDOWS\system32
5>我的電腦-屬性 看看是不是改過來了。

㈣ 在頁面上進行緩存後又要保證局部的數據不緩存,如何實現

頁面部分緩存是指輸出緩存頁面的某些部分,而不是緩存整個頁面內容。實現頁面部分緩存有兩種機制:一種是將頁面中需要緩存的部分置於用戶控制項(.ascx文件)中,並且為用戶控制項設置緩存功能(包含用戶控制項的ASP.NET頁面可設置也可不設置緩存)。這就是通常所說的「控制項緩存」。設置控制項緩存的實質是對用戶控制項進行緩存配置。主要包括以下3種方法:一是使用@ OutputCache指令以聲明方式為用戶控制項設置緩存功能,二是在代碼隱藏文件中使用PartialCachingAttribute類設置用戶控制項緩存;三是使用ControlCachePolicy類以編程方式指定用戶控制項緩存設置。另外,還有一種稱為「緩存後替換」的方法。該方法與控制項緩存正好相反,將頁面中的某一部分設置為不緩存,因此,盡管緩存了整個頁面,但是當再次請求該頁時,將重新處理那些沒有設置為緩存的內容。

使用@ OutputCache指令

控制項緩存與頁面輸出緩存的@ OutputCache指令既有相似之處,又有不同的方面。二者的共同點在於它們的設置方法基本相同,都是文件頂部設置包含屬性的@ OutputCache指令字元串。不同點包括以下兩個方面:一是控制項緩存的@ OutputCache指令設置在用戶控制項文件中,而頁面輸出緩存的@ OutputCache設置在普通ASP.NET文件中。二是控制項緩存的@ OutputCache指令只能設置6個屬性,Duration、Shared、SqlDependency、VaryByControl、VaryByCustom和VaryByParam。而在頁面輸出緩存的@ OutputCache指令字元串中設置的屬性多達10個。以上是設置控制項緩存時需要注意的問題。下面列舉了一些利用@ OutputCache指令設置控制項緩存的示例,其中重點說明了VaryByParam和VaryByControl等屬性應用。

用戶控制項中的@ OutputCache指令設置源代碼

<%@ OutputCache Duration="120" VaryByParam="CategoryID;SelectedID"%>

以上代碼設置用戶控制項緩存有效期時間是120秒,並且允許使用CategoryID和SelectedID參數來改變緩存。通過VaryByParam屬性設置,在伺服器緩存中可能存儲多個用戶控制項的實例。例如,對於一個包含用戶控制項的頁面,可能存在如下的URL鏈接。

包含用戶控制項的頁面的URL鏈接

http://localhost/mypage.aspx?categoryid=foo&selectedid=0
http://localhost/mypage.aspx?categoryid=foo&selectedid=1

當請求如上URL地址的頁面時,由於控制項中@ OutputCache指令的設置,尤其是屬性VaryByParam的設置,那麼在伺服器緩存中就會存儲兩個版本的用戶控制項緩存實例。

控制項緩存設置除了支持以上所述VaryByParam屬性外,還支持VaryByControl屬性。VaryByParam屬性基於使用POST或者GET方式發送的名稱/值對來改變緩存,而VaryByControl屬性通過用戶控制項文件中包含的伺服器控制項來改變緩存。下面是VaryByControl屬性的應用示例代碼。

用戶控制項中的@ OutputCache指令設置源代碼

<%@ OutputCache Duration="120" VaryByParam="none" VaryByControl="Category" %>

以上代碼設置緩存有效期是120秒,並且頁面不隨任何GET或POST參數改變(即使不使用VaryByParam屬性,但是仍然需要在@ OutputControl指令中顯式聲明該屬性)。如果用戶控制項中包含ID屬性為「Category」的伺服器控制項(例如下拉框控制項),那麼緩存將根據該控制項的變化來存儲用戶控制項數據。

如果讀者已經掌握了頁面輸出緩存的@ OutputCache指令設置方法,那麼控制項緩存的@ OutputCache指令也會迎刃而解,無非僅使用其中的6個屬性而已。然而,可能會產生疑問:如果ASP.NET頁面和其中包含的用戶控制項都通過@ OutputCache指令設置了緩存,那麼緩存該如何運行呢?

遇到這個問題時,應掌握以下個基本原則:一是ASP.NET允許在頁面和頁面的用戶控制項中同時使用@ OutputCache指令設置緩存,並且允許設置不同的緩存過期時間值。二是如果頁面輸出緩存過期時間長於用戶控制項輸出緩存過期時間,則頁面的輸出緩存持續時間優先。例如,如果頁面輸出緩存設置為100秒,而用戶控制項的輸出緩存設置為50秒,則包括用戶控制項在內的整個頁將在輸出緩存中存儲100秒,而與用戶控制項較短的時間設置無關。三是如果頁面輸出緩存過期時間比用戶控制項的輸出緩存過期時間短,則即使已為某個請求重新生成該頁面的其餘部分,也將一直緩存用戶控制項直到其過期時間到期為止。例如,如果頁面輸出緩存設置為50秒,而用戶控制項輸出緩存設置為100秒,則頁面其餘部分每到期兩次,用戶控制項才到期一次。

java如何將1個list存入緩存中並在緩存在修改數據

publicclassTest2{

publicstaticvoidmain(String[]args){
try{
List<String>list=newArrayList<>();
//模擬傳過來的值
inti=0;
while(true){
Longtime=newDate().getTime();
//將當前時間與值拼接成字元串保存到list
list.add("value"+i+","+time);
//調用處理方法
processing(list);
i++;
//模擬每次傳入的時間長度
Thread.sleep(3000);
}
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidprocessing(List<String>list){
//第一個存入的值
Stringsrc1=list.get(0);
//最後一個存入的值
Stringsrc2=list.get(list.size()-1);
//通過轉換成數組
String[]c1=src1.split(",");
String[]c2=src2.split(",");
//拿到第一個存入的時間字元串轉換成Long
Longl1=Long.parseLong(c1[1]);
//拿到最新的時間字元串轉換成Long
Longl2=Long.parseLong(c2[1]);
//如果大於等於30000毫秒就說明了過了30秒清空
if((l2-l1)>=30000){
list.clear();
}
System.out.println("每次的值"+src2);
System.out.println("是否30秒清空"+(list.size()==0));
}
}


/*******************************第二種方式*************************************/

publicclassTest2{
//定義一個全局變數用於接收時間
privatestaticLongtime=0L;
publicstaticvoidmain(String[]args){
try{
List<String>list=newArrayList<>();
//模擬傳過來的值
inti=0;
while(true){
//如果list是在清空狀態那麼就創建個時間為第一次時間
if(list.size()==0){
time=newDate().getTime();
}
//將字元串保存到list
list.add("value"+i);
//調用處理方法,沒次傳入一個當前存入對象的時間
processing(list,newDate().getTime());
i++;
//模擬每次傳入的時間長度
Thread.sleep(3000);
}
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidprocessing(List<String>list,Longtimes){
//當前時間-第一次存入的時間大於等於30000毫秒
//就是過了30秒執行清空操作
if((times-time)>=30000){
list.clear();
}
for(Stringls:list){
System.out.println("每次的值"+ls);
}
System.out.println("是否30秒清空"+(list.size()==0));
}
}

我沒有redis 只能模擬一個 你看下 其實 你就多了一步 從緩存中取值 判斷不能 等於 30000毫秒 因為 時間會有所偏差 可能大於 所以 大於等於,你要是覺得 毫秒太長你可以 轉換成秒存入 在計算


第二種 的話 你的程序 可能不需要太大改掉

㈥ 關於緩存

用優化類軟體設置嘛!

㈦ oracle keep pool會不會自動緩存cache的表數據的更改

ORACLE緩存是把ORACLE近期查看的語句防止在ORACLE設定的緩存當中
ORACLE緩存表是把表某個表放置在緩存當中,緩存是ORACLE在內存中的一個分區
表緩存的設定
oracle中如何將表緩存到內存中
由於在一些靜態資料表在資料庫中被頻繁的訪問,所以可以考慮將這些數據量不大的表緩存到內存當中。
將fisher表緩存到內存中
alter table fisher cache;方法一
2)alter table fisher storage(buffer_pool keep);方法二
--取消緩存
1)alter table fisher nocache;
2)alter table fisher storage(buffer_pool default);
select table_name,OWNER,cache,buffer_pool from dba_tables where table_name='FISHER'; --查看是否緩存
select * from dba_segments where segment_name='FISHER' ; --查看錶大小
方法一: cache是將表緩存到share pool 中,該操作直接將表緩存的熱端,受LRU演算法控制。
方法二:將表緩存到一個固定的內存空間中,默認情況下buffer_pool空間為0,。需手動設置空間大小。
設置空間大小:alter system set db_keep_cache_size=50M scope=both sid=『*';
--表緩存
alter table table_name cache = alter table table_name storage(buffer_pool default);
alter table table_name storage(buffer_pool keep);
--已經加入到KEEP區的表想要移出緩存,使用
alter table table_name nocache;
--查看哪些表被放在緩存區 但並不意味著該表已經被緩存
select table_name from dba_tables where buffer_pool='keep';
--查詢到該表是否已經被緩存
select table_name,cache,buffer_pool from user_TABLES where cache like '%Y';
--查詢當前用戶下表的情況
select table_name,cache,buffer_pool from user_TABLES;
--對於普通LOB類型的segment的cache方法
alter table t2 modify lob(c2) (storage (buffer_pool keep) cache);
--取消緩存
alter table test modify lob(address) (storage (buffer_pool keep) nocache);
keep Buffer Pool
Keep Buffer Pool 的作用是緩存那些需要經常查詢的對象但又容易被默認緩沖區置換出去的對象,按慣例,Keep pool設置為合理的大小,以使其中存儲的對象不再age out,也就是查詢這個對象的操作不會引起磁碟IO操作,可以極大地提高查詢性能。
默認的情況下 db_keep_cache_size=0,未啟用,如果想要啟用,需要手工設置db_keep_cache_size的值,設置了這個值之後 db_cache_size 會減少。
並不是我們設置了keep pool 之後,熱點表就一定能夠緩存在 keep pool ,keep pool 同樣也是由LRU 鏈表管理的,當keep pool 不夠的時候,最先緩存到 keep pool 的對象會被擠出,不過與default pool 中的 LRU 的管理方式不同,在keep pool 中表永遠是從MRU 移動到LRU,不會由於你做了FTS而將表緩存到LRU端,在keep pool中對象永遠是先進先出。當oracle發現你的表太太,大過你設定keep pool的大小是,根本就不會放到keep池中去的(如keep pool設定100M ,設定的用戶緩存的表為200M)。可以用select segment_name from dba_segments where BUFFER_POOL = 'KEEP';語句查看便知。
10g中SGA自動管理,ORACLE並不會為我們管理keep pool ,ORACLE只會管理default pool。
查看 keep pool 大小
SQL> select component,current_size from v$sga_dynamic_components
2 where component='KEEP buffer cache';
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
KEEP buffer cache 0
手動分配keep pool
SQL> show parameter keep
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
control_file_record_keep_time integer 7
db_keep_cache_size big integer 0
SQL> alter system set db_keep_cache_size=10m;
系統已更改。
SQL> show parameter keep
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
control_file_record_keep_time integer 7
db_keep_cache_size big integer 16M這里keep pool 16M,可我前面設置命名是10m了?
SQL> select component,current_size from v$sga_dynamic_components where component='KEEP buffer cache';
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
KEEP buffer cache 16777216 這里keep pool 16M,可我前面設置命名是10m了?
查看keep pool剩餘大小
SQL> select p.name,a.cnum_repl "total buffers",a.anum_repl "free buffers" from x$kcbwds a, v$buffer_pool p
2 where a.set_id=p.LO_SETID and p.name='KEEP';
NAME total buffers free buffers
-------------------- ------------- ------------
KEEP 1984 1984
可以看到沒有使用過keep 池
指定table的緩存池
SQL>create table test as select * from dba_objects;;
Table created.
SQL> alter table test storage(buffer_pool keep);
Table altered.
或者是
create table test storage(buffer_pool keep) as select * from dba_objects;
查看放入Keep的對象
SQL> select segment_name from dba_segments where BUFFER_POOL = 'KEEP';
SEGMENT_NAME
--------------------------------------------------------------------------------
TEST
SQL> /
NAME total buffers free buffers
-------------------- ------------- ------------
KEEP 1984 1962 可以看到使用了22個block
查看以上的表佔用了db_keep_cache_size 多大的空間?
SQL> select substr(sum(b.NUMBER_OF_BLOCKS) * 8129 / 1024 / 1024, 1, 5) || 'M'
from (SELECT o.OBJECT_NAME, COUNT(*) NUMBER_OF_BLOCKS
FROM DBA_OBJECTS o, V$BH bh, dba_segments dd
WHERE o.DATA_OBJECT_ID = bh.OBJD
AND o.OWNER = dd.owner
and dd.segment_name = o.OBJECT_NAME
and dd.buffer_pool != 'DEFAULT'
GROUP BY o.OBJECT_NAME
ORDER BY COUNT(*)) b; 2 3 4 5 6 7 8 9
SUBSTR(SUM(
-----------
3.643M
SQL> select table_name,cache,blocks from dba_tables where wner='ROBINSON' and buffer_pool='KEEP';
TABLE_NAME CACHE BLOCKS
------------------------------ -------------------- ----------
TEST N 22
可以看到這個表的 22個block 全部cache 到 keep pool ,這里的cache 欄位表明 這個表 還沒有使用 這個命令 alter table test cache,如果 使用了 alter table test cache ,命令,那麼 N 將變成Y
總結:如果表經常使用,而且表較小,可以設置 keep pool ,將table 全部 cache 到 keep pool, keep pool 要麼 全部 cache 一個table ,要麼不cache 。所以,對於大表來說,如果想要 cache 到 keep pool, 就需要設置 較大的 keep pool ,以容納大的 table,否者就沒有作用了。
Recycle Buffer Pool
Recycle Buffer Pool正好相反。Recycle Buffer Pool用於存儲臨時使用的、不被經常使用的較大的對象,這些對象放置在Default Buffer Pool顯然是不合適的,這些塊會導致過量的緩沖區刷新輸出,而且不會帶來任何好處,因為等你想要再用這個塊時,它可已經老化退出了緩存。要把這些段與默認池和保持池中的段分開,這樣就不會導致默認池和保持池中的塊老化而退出緩存。
SQL> show parameter recyc
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_recycle string
db_recycle_cache_size big integer 12M
recyclebin string on
如何將一個表放入Recycle Buffer Pool中:
SQL> alter table test1 storage (buffer_pool recycle);
Table altered.
很多老的文檔會提及buffer_pool_keep和buffer_pool_recycle 這兩個參數,其實這兩個參數已經廢棄,由新參數db_keep_cache_size和db_recycle_cache_size 替代:
SQL>select ISDEPRECATED,NAME from v$parameter where name = 'buffer_pool_keep';
ISDEP NAME
----- -----------------
TRUE buffer_pool_keep
=======================================================================================
--表緩存
alter table ..... storage(buffer_pool keep);
--查看哪些表被放在緩存區 但並不意味著該表已經被緩存
select table_name from dba_tables where buffer_pool='keep';
--查詢到該表是否已經被緩存
select table_name,cache,buffer_pool from user_TABLES where cache like '%Y';
--已經加入到KEEP區的表想要移出緩存,使用
alter table table_name nocache;
--批量插入ORACLE建議用
insert all into ...insert into ...select 1 from al;
insert all into ... insert into ...select 1 from al;
--查詢當前用戶下表的情況
select table_name,cache,buffer_pool from user_TABLES;
--對於普通LOB類型的segment的cache方法
alter table t2 modify lob(c2) (storage (buffer_pool keep) cache);
--取消緩存
alter table test modify lob(address) (storage (buffer_pool keep) nocache);
--查詢段
select segment_name,segment_type,buffer_pool from user_segments;
--對基於CLOB類型的對象的cache方法
alter table lob1 modify lob(c1.xmldata) (storage (buffer_pool keep) cache);
--查詢該用戶下所有表內的大欄位情況
select column_name,segment_name from user_lobs;
來一段Tom關於Multiple Buffer Pools的解釋,講解得很清楚:
實際上,這3 個池會以大體相同的方式管理塊;將塊老化或緩存的演算法並沒有根本的差異。這樣做的目標是讓DBA 能把段聚集到「熱」區(hot)、「溫」區(warm)和「不適合緩存」區(do not care to cache)。
理論上講,默認池中的對象應該足夠熱(也就是說,用得足夠多),可以保證一直呆在緩存中。緩存會把它們一直留在內存中,因為它們是非常熱門的塊。可能還有一些段相當熱門,但是並不太熱;這些塊就作為溫塊。這些段的塊可以從緩存刷新輸出,為不常用的一些塊(「不適合緩存」塊)騰出空間。為了保持這些溫段的塊得到緩存,可以採取下面的某種做法:將這些段分配到保持池,力圖讓溫塊在緩沖區緩存中停留得更久。將「不適合緩存」段分配到回收池,讓回收池相當小,以便塊能快速地進入緩存和離開緩存(減少管理的開銷)。這樣會增加DBA 所要執行的管理工作,因為要考慮3 個緩存,要確定它們的大小,還要為這些緩存分配對象。還要記住,這些池之間沒有共享,所以,如果保持池有大量未用的空間,即使默認池或回收池空間不夠用了,保持池也不會把未用空間交出來。總之,這些池一般被視為一種非常精細的低級調優設備,只有所有其他調優手段大多用過之後才應考慮使用。
按以上步驟把表storage到keep pool中,然後調用alter system flush buffer_cache清空緩存,再全表掃描該表並打開執行計劃跟蹤,發現有physical reads,如下:
第一次執行計劃如下:
----------------------------------------------------------
0 recursive calls
0 db block gets
253 consistent gets
251 physical reads
0 redo size
520 bytes sent via SQL*Net to client
469 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
第二次執行計劃如下:
----------------------------------------------------------
0 recursive calls
0 db block gets
253 consistent gets
0 physical reads
0 redo size
520 bytes sent via SQL*Net to client
469 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
不知道是否可以這樣理解:對於storage到keep pool中的表,第一次會直接physical reads 到keep pool中,下次就直接從keep pool中讀了。flush buffer_cache會清空keep pool,這個試驗就可以證明。
像上面這樣連續執行2次再看執行計劃,和不設置keep pool時的執行計劃應該一樣的,因為讀第二次時,也是從default cache中讀。但是當我們多讀幾個大表到buffer cache後,也就是替換原來從default cache中讀取的數據後,再去讀放入keep中的表時,就會發現keep確實起作用了,唉,終於明白怎麼一回事,害得我為flush buffer導致keep中的表也phisical郁悶了半天。
ORACLE緩存設置
Oracle緩存由兩個參數控制SGA_TARGET和PGA_AGGREGATE_TARGET,設置了這兩個參數,其他的基本內存部分都由Oracle自動配置為最優值,這也是Oracle推薦的方式。
SGA_TARGET 和PGA_AGGREGATE_TARGET是動態參數,可以在不重啟資料庫的情況下修改。但是SGA_TARGET受限於 sga_max_size,SGA_TARGET不能超過sga_max_size,所以要增大sga_target先要增大sga_max_size,而sga_max_size是靜態參數,修改sga_max_size必須重啟Oracle。
所以修改sga_target和pga_aggregate_target的過程如下:
1、修改sga_max_size
SQL>ALTER SYSTEM SET sga_max_size=4g scope=spfile;
2、重啟Oracle
3、設置參數sga_target和pga_aggregate_target,
alter system set sga_target=4G;
alter system set pga_aggregate_target=1g;
如果使用的是10g,已經是ASM, oracle會根據統計的信息,自動的來調整你的內存組件的大小,你只需要設置sga_target即可。當然你可以手動設置 db_cache_size,如果設置了的話,Oracle會在自動調整內存大小的時候把這個作為db_cache_size的最小值。
對於sga_target,在動態修改的時候,最大值不能操過sga_max_size, 如果是用scope=spfile這個方式來修改可以超過sga_max_size,應該此時sga_max_size也跟著變大了,如果超過的話。
Oracle 對資料庫的cache有他自己的計算的,10g以後,內存是動態的根據對你使用系統的統計來進行調整的,如果出現問題,這塊不是原因,你之所以db cache還沒有上去,可能是訪問的數據比較少,不過你加大db_cache_size的值,會保留這個內存空間的,但是也是一樣的,數據 load到內存里,才看得到變化。
數據訪問是什麼樣的訪問,你的系統是OLAP還是OLTP,這些應用上的東西對你的決定也有影響的,要謹記,資料庫的優化和維護,不僅僅是DBA來做的。如果是到了只能通過DBA來做這一步的話,就相當於看病已經到了拿手術刀這一步了。你的改變帶來的風險和代價最高。
要想減少磁碟讀,只能增大內存的使用.樓主可以看看這個視圖v$db_cache_size,並執行下面的查詢:
select block_size, size_for_estimate, size_factor, estd_physical_read_factor, estd_physical_reads from v$db_cache_advice;
Oracle在這個視圖中針對db_cache_size的大小會給出一些建議。
下面解釋幾個列的含義
size_for_estimate:估計的cache size大小
size_factor: 估計的cache size大小與當前大小的比值
estd_physical_reads:在估計的cache size大小情況下,會產生的物理讀數量
estd_physical_read_factor:估計的物理讀數量與當前物理讀數量的比值。
例子:
SIZE_FOR_ESTIMATE SIZE_FACTOR ESTD_PHYSICAL_READ_FACTOR ESTD_PHYSICAL_READS

㈧ vue用了vuex和路由的緩存,出問題了一個頁面添加按鈕進去後一直都有上一次添加的數據參數在上面如何修改

建議在路由鉤子裡面做判斷,beforeRouterEnter

㈨ CPU可否通過軟體修改內部的參數:頻率、緩存等等 CPU-Z能否判別修改過的CPU(如果能修改的話),謝謝。

CPU可以改,要不然就沒有超頻這一說了,每個型號的CPU頻率開始都一樣,你只要知道CPU的型號就OK了!

㈩ oscache緩存整個頁面怎麼更改web.xml

1、OSCache是什麼?
OSCache標記庫由OpenSymphony設計,它是一種開創性的緩存方案,它提供了在現有JSP頁面之內實現內存緩存的功能。OSCache是個一個被廣泛採用的高性能的J2EE緩存框架,OSCache還能應用於任何Java應用程序的普通的緩存解決方案。
2、OSCache的特點
(1) 緩存任何對象:你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
(2) 擁有全面的API:OSCache API允許你通過編程的方式來控制所有的OSCache特性。
(3) 永久緩存:緩存能被配置寫入硬碟,因此允許在應用伺服器的多次生命周期間緩存創建開銷昂貴的數據。
(4) 支持集群:集群緩存數據能被單個的進行參數配置,不需要修改代碼。
(5) 緩存過期:你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略(如果默認性能不能滿足需要時)。
3、OSCache的安裝與配置
網上已經有一個不錯的使用教程:blog.csdn.net/...9.aspx
4、有關「用OSCache進行緩存對象」的研究
這個是我今天要說的東西。網上對於OSCache緩存Web頁面很多說明和例子,但對於緩存對象方面說得不多,我就把自已寫得一些東西放出來,讓大家看一看是怎樣緩存對象的!
我基於GeneralCacheAdministrator類來寫的BaseCache類
view plainprint?
package com.klstudio.cache;

import java.util.Date;

import com.opensymphony.oscache.base.NeedsRefreshException;
import com.opensymphony.oscache.general.GeneralCacheAdministrator;

public class BaseCache extends GeneralCacheAdministrator {
//過期時間(單位為秒);
private int refreshPeriod;
//關鍵字前綴字元;
private String keyPrefix;

private static final long serialVersionUID = -4397192926052141162L;

public BaseCache(String keyPrefix,int refreshPeriod){
super();
this.keyPrefix = keyPrefix;
this.refreshPeriod = refreshPeriod;
}
//添加被緩存的對象;

熱點內容
iqz3哪個配置好一點 發布:2024-10-08 04:34:07 瀏覽:760
二戰時期的電報密碼叫什麼 發布:2024-10-08 04:34:06 瀏覽:618
神武手游什麼隊伍配置最好 發布:2024-10-08 04:19:05 瀏覽:420
seer資料庫 發布:2024-10-08 04:18:47 瀏覽:477
l3緩存分數下降 發布:2024-10-08 04:10:36 瀏覽:433
linux游戲伺服器 發布:2024-10-08 04:04:17 瀏覽:74
有什麼推薦的網游低配置 發布:2024-10-08 03:17:03 瀏覽:36
淘優惠源碼 發布:2024-10-08 03:17:02 瀏覽:780
linux系統製作 發布:2024-10-08 02:47:15 瀏覽:252
4s緩存怎麼清理 發布:2024-10-08 02:46:42 瀏覽:429