久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

緩存

來(lái)自站長(zhǎng)百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

緩存(Cache memory)是硬盤(pán)控制器上的一塊內(nèi)存芯片,具有極快的存取速度,它是硬盤(pán)內(nèi)部存儲(chǔ)和外界接口之間的緩沖器。由于硬盤(pán)的內(nèi)部數(shù)據(jù)傳輸速度和外界介面?zhèn)鬏斔俣炔煌?,緩存在其中起到一個(gè)緩沖的作用。緩存的大小與速度是直接關(guān)系到硬盤(pán)的傳輸速度的重要因素,能夠大幅度地提高硬盤(pán)整體性能。當(dāng)硬盤(pán)存取零碎數(shù)據(jù)時(shí)需要不斷地在硬盤(pán)與內(nèi)存之間交換數(shù)據(jù),有大緩存,則可以將那些零碎數(shù)據(jù)暫存在緩存中,減小外系統(tǒng)的負(fù)荷,也提高了數(shù)據(jù)的傳輸速度。

基本簡(jiǎn)介[ ]

緩存是指可以進(jìn)行高速數(shù)據(jù)交換的存儲(chǔ)器,它先于內(nèi)存與CPU交換數(shù)據(jù),因此速度很快。L1 Cache(一級(jí)緩存)是CPU第一層高速緩存。內(nèi)置的L1高速緩存的容量和結(jié)構(gòu)對(duì)CPU的性能影響較大,不過(guò)高速緩沖存儲(chǔ)器均由靜態(tài)RAM組成,結(jié)構(gòu)較復(fù)雜,在CPU管芯面積不能太大的情況下,L1級(jí)高速緩存的容量不可能做得太大。一般L1緩存的容量通常在32—256KB。L2 Cache(二級(jí)緩存)是CPU的第二層高速緩存,分內(nèi)部和外部?jī)煞N芯片。內(nèi)部的芯片二級(jí)緩存運(yùn)行速度與主頻相同,而外部的二級(jí)緩存則只有主頻的一半。L2高速緩存容量也會(huì)影響CPU的性能,原則是越大越好,普通臺(tái)式機(jī)CPU的L2緩存一般為128KB到2MB或者更高,筆記本、服務(wù)器和工作站上用CPU的L2高速緩存最高可達(dá)1MB-3MB。

  緩存只是內(nèi)存中少部分?jǐn)?shù)據(jù)的復(fù)制品,所以CPU到緩存中尋找數(shù)據(jù)時(shí),也會(huì)出現(xiàn)找不到的情況(因?yàn)檫@些數(shù)據(jù)沒(méi)有從內(nèi)存復(fù)制到緩存中去),這時(shí)CPU還是會(huì)到內(nèi)存中去找數(shù)據(jù),這樣系統(tǒng)的速度就慢下來(lái)了,不過(guò)CPU會(huì)把這些數(shù)據(jù)復(fù)制到緩存中去,以便下一次不要再到內(nèi)存中去取。隨著時(shí)間的變化,被訪問(wèn)得最頻繁的數(shù)據(jù)不是一成不變的,也就是說(shuō),剛才還不頻繁的數(shù)據(jù),此時(shí)已經(jīng)需要被頻繁的訪問(wèn),剛才還是最頻繁的數(shù)據(jù),又不頻繁了,所以說(shuō)緩存中的數(shù)據(jù)要經(jīng)常按照一定的算法來(lái)更換,這樣才能保證緩存中的數(shù)據(jù)是被訪問(wèn)最頻繁的。

工作原理[ ]

緩存的工作原理是當(dāng)CPU要讀取一個(gè)數(shù)據(jù)時(shí),首先從緩存中查找,找到就立即讀取并送給CPU處理;沒(méi)有找到,就用相對(duì)慢的速度從內(nèi)存中讀取并送給CPU處理,同時(shí)把這個(gè)數(shù)據(jù)所在的數(shù)據(jù)塊調(diào)入緩存中,可以使得以后對(duì)整塊數(shù)據(jù)的讀取都從緩存中進(jìn)行,不必再調(diào)用內(nèi)存。正是這樣的讀取機(jī)制使CPU讀取緩存的命中率非常高(大多數(shù)CPU可達(dá)90%左右),也就是說(shuō)CPU下一次要讀取的數(shù)據(jù)90%都在緩存中,只有大約10%需要從內(nèi)存讀取。這大大節(jié)省了CPU直接讀取內(nèi)存的時(shí)間,也使CPU讀取數(shù)據(jù)時(shí)基本無(wú)需等待??偟膩?lái)說(shuō),CPU讀取數(shù)據(jù)的順序是先緩存后內(nèi)存。

  RAM和ROM相對(duì)的,RAM是掉電以后,其中的信息就消失那一種,ROM在掉電以后信息也不會(huì)消失那一種。RAM又分兩種,一種是靜態(tài)RAM,SRAM;一種是動(dòng)態(tài)RAM,DRAM。前者的存儲(chǔ)速度要比后者快得多,使用的內(nèi)存一般都是動(dòng)態(tài)RAM。為了增加系統(tǒng)的速度,把緩存擴(kuò)大不就行了嗎,擴(kuò)大的越大,緩存的數(shù)據(jù)越多,系統(tǒng)不就越快了嗎?緩存通常都是靜態(tài)RAM,速度是非常的快, 但是靜態(tài)RAM集成度低(存儲(chǔ)相同的數(shù)據(jù),靜態(tài)RAM的體積是動(dòng)態(tài)RAM的6倍), 價(jià)格高(同容量的靜態(tài)RAM是動(dòng)態(tài)RAM的四倍), 由此可見(jiàn),擴(kuò)大靜態(tài)RAM作為緩存是一個(gè)非常愚蠢的行為, 但是為了提高系統(tǒng)的性能和速度,必須要擴(kuò)大緩存, 這樣就有了一個(gè)折中的方法,不擴(kuò)大原來(lái)的靜態(tài)RAM緩存,而是增加一些高速動(dòng)態(tài)RAM做為緩存, 這些高速動(dòng)態(tài)RAM速度要比常規(guī)動(dòng)態(tài)RAM快,但比原來(lái)的靜態(tài)RAM緩存慢, 把原來(lái)的靜態(tài)ram緩存叫一級(jí)緩存,而把后來(lái)增加的動(dòng)態(tài)RAM叫二級(jí)緩存。

Web 應(yīng)用系統(tǒng)存在哪些速度差異?[ ]

讀取文件系統(tǒng) ? 讀取磁盤(pán)
讀取數(shù)據(jù)庫(kù)內(nèi)存 ? 讀取文件系統(tǒng)
讀取應(yīng)用內(nèi)存 ? 訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器
讀取靜態(tài)文件 ? 訪問(wèn)應(yīng)用服務(wù)器
讀取瀏覽器緩存 ? 訪問(wèn)網(wǎng)站

緩存技術(shù)分類[ ]

操作系統(tǒng)磁盤(pán)緩存 ? 減少磁盤(pán)機(jī)械操作
數(shù)據(jù)庫(kù)緩存 ? 減少文件系統(tǒng) I/O
應(yīng)用程序緩存 ? 減少對(duì)數(shù)據(jù)庫(kù)的查詢
客戶端瀏覽器緩存 ? 減少對(duì)網(wǎng)站的訪問(wèn)

PHP緩存技術(shù)[ ]

WEB程序獲取信息的方式主要是查詢數(shù)據(jù)庫(kù),當(dāng)數(shù)據(jù)庫(kù)不是很大的情況下不會(huì)有太大的問(wèn)題.然而,隨著網(wǎng)站的發(fā)展,數(shù)據(jù)庫(kù)呈幾何級(jí)數(shù)的方式增長(zhǎng)的時(shí)候,就會(huì)出現(xiàn)瓶頸.于是PHP緩存技術(shù)誕生了。.PHP緩存技術(shù)工作時(shí),當(dāng)程序查詢數(shù)據(jù)的時(shí)候,會(huì)把相應(yīng)的結(jié)果序列化后保存到文件中,以后同樣的查詢語(yǔ)句就可以不用直接查詢數(shù)據(jù)庫(kù),而是從緩存文件中獲得。這一改進(jìn)使得程序運(yùn)行速度得以大幅度提升.

目前應(yīng)用PHP緩存技術(shù)比較流行的方法主要是Adodb+Smarty這樣的黃金搭檔.
PHP緩存技術(shù)工作原理
首先看看adodb提供的數(shù)據(jù)緩存功能:
  1. <?php   
  2. include('adodb.inc.php');load code common to ADOdb   
  3. $ADODB_CACHE_DIR = '/usr/ADODB_cache';   
  4. $conn = &ADONewConnection('mysql');create a connection   
  5. $conn->PConnect(' ','userid',,'agora');connect to MySQL, agora db   
  6. $sql = 'select CustomerName, CustomerID from customers';   
  7. $rs = $conn->CacheExecute(15,$sql);
  8. ?> 如上,每次查詢數(shù)據(jù)的時(shí)候,會(huì)把相應(yīng)的結(jié)果序列化后保存到文件中,以后同樣的查詢語(yǔ)句就可以不用直接查詢數(shù)據(jù)庫(kù),而是從緩存文件中獲得。
再來(lái)看看Smarty提供的頁(yè)面緩存功能:
  1. <?php 1<?php   
  2. require('Smarty.class.php');   
  3. $smarty = new Smarty;   
  4. $smarty->caching = true;   
  5. if(!$smarty->is_cached('index.tpl')) {   
  6. // No cache available, do variable assignments here.   
  7. $contents = get_database_contents();   
  8. $smarty->assign($contents);   
  9. }   
  10. $smarty->display('index.tpl');   
  11. ?>

如上,每次訪問(wèn)頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),完成模板變量的賦值,顯示頁(yè)面,同時(shí)生成緩存文件,這樣下次訪問(wèn)的時(shí)候緩存文件就發(fā)揮作用了,而不會(huì)再執(zhí)行if塊的數(shù)據(jù)查詢語(yǔ)句了。當(dāng)然,在實(shí)際使用中會(huì)有很多東西要考慮,比如,有效期的設(shè)置,緩存組的設(shè)置等等,具體可以查看Smarty手冊(cè)中有關(guān)緩存(caching)的相關(guān)章節(jié)。

以上兩個(gè)PHP流行組件緩存方式的側(cè)重點(diǎn)是不同的,對(duì)于Adodb的緩存而言,它緩存的是數(shù)據(jù),對(duì)于Smarty的緩存而言,它緩存的是頁(yè)面。其他提供緩存功能的組件還有很多(如:PEAR::Cache_Lite等等),實(shí)際編程中使用哪個(gè)方案要具體情況具體分析,也可能會(huì)綜合使用。

使用這些組件內(nèi)置的緩存方案有一個(gè)很明顯的好處是它們的實(shí)現(xiàn)對(duì)客戶端而言都很透明。只要進(jìn)行必要的設(shè)置(如:緩存時(shí)間,緩存目錄等等)就可以了,而不用過(guò)多考慮實(shí)現(xiàn)緩存的細(xì)節(jié)問(wèn)題,系統(tǒng)會(huì)根據(jù)設(shè)置自動(dòng)管理緩存。但是其缺點(diǎn)也同樣明顯,因?yàn)槊看握?qǐng)求仍然要用PHP解析一遍,效率和純靜態(tài)相比還是大打折扣,在大的PV面前還是不能滿足要求,在這種情況下,僅僅做動(dòng)態(tài)緩存就不夠了,必須實(shí)現(xiàn)靜態(tài)緩存。

PHP,一門(mén)最近幾年興起的web設(shè)計(jì)腳本語(yǔ)言,由于它的強(qiáng)大和可伸縮性,近幾年來(lái)得到長(zhǎng)足的發(fā)展,php相比傳統(tǒng)的asp網(wǎng)站,在速度上有絕對(duì)的優(yōu)勢(shì),想mssql轉(zhuǎn)6萬(wàn)條數(shù)據(jù)php如需要40秒,asp不下2分鐘.但是,由于網(wǎng)站的數(shù)據(jù)越來(lái)越多,我們渴求能更快速的調(diào)用數(shù)據(jù),不必要每次都從數(shù)據(jù)庫(kù)調(diào),我們可以從其他的地方,比方一個(gè)文件,或者某個(gè)內(nèi)存地址,這就是php的緩存技術(shù),也就是Cache技術(shù).

內(nèi)容加載[ ]

在使用緩存數(shù)據(jù)前,必須將數(shù)據(jù)加載到緩存中,有兩種機(jī)制來(lái)加載數(shù)據(jù):

  1. 提前加載Proactive Load——使用這種方式時(shí),你提前將所有的狀態(tài)數(shù)據(jù)加載到緩存中,可能在應(yīng)用程序或線程啟動(dòng)時(shí)進(jìn)行,然后在應(yīng)用程序或線程的生存期內(nèi)一直緩存;
  2. 動(dòng)態(tài)加載Reactive Load——或稱反應(yīng)式加載,當(dāng)使用這種方法時(shí),在應(yīng)用程序請(qǐng)求數(shù)據(jù)時(shí)取到數(shù)據(jù),并且將它緩存起來(lái)以備后續(xù)使用。

過(guò)期策略[ ]

另外一個(gè)關(guān)鍵因素是如何保持緩存數(shù)據(jù)和主數(shù)據(jù)(文件或數(shù)據(jù)庫(kù)或其他的應(yīng)用程序資源)的一致性,你可以定義過(guò)期策略來(lái)決定緩存中的內(nèi)容,如已經(jīng)緩存的時(shí)間或者收到其他資源的通知。

Asp.net緩存[ ]

將常用的數(shù)據(jù)保存在內(nèi)存中對(duì)asp的開(kāi)發(fā)人員來(lái)說(shuō)并不陌生,Session對(duì)象和Application對(duì)象提供鍵值對(duì)來(lái)緩存數(shù)據(jù),Session對(duì)象保存和單個(gè)用戶有關(guān)的數(shù)據(jù),Application對(duì)象可保留和應(yīng)用程序有關(guān)的數(shù)據(jù),每個(gè)用戶都可以訪問(wèn)。

在Asp.net中,提供了專門(mén)用于緩存數(shù)據(jù)的Cache對(duì)象,它的應(yīng)用范圍是應(yīng)用程序域。生存期是和應(yīng)用程序緊密相關(guān)的,每當(dāng)應(yīng)用程序啟動(dòng)的時(shí)候就重新創(chuàng)建Cache對(duì)象。它域Application對(duì)象的主要區(qū)別就是提供了專門(mén)用于緩存管理的特性,比如依賴和過(guò)期策略。

你可以使用Cache對(duì)象和它的屬性來(lái)實(shí)現(xiàn)高級(jí)的緩存功能,同時(shí)可以利用Asp.net Cache來(lái)對(duì)客戶端輸出的響應(yīng)內(nèi)容進(jìn)行緩存。關(guān)于Asp.net中的緩存技術(shù),有以下內(nèi)容要介紹:

編程緩存Programmatic Caching[ ]

Cache對(duì)象定義在System.Web.Caching命名空間,可以使用HttpContext類的Cache屬性或Page對(duì)象的Cache屬性來(lái)得到Cache的引用,Cache對(duì)象除了存儲(chǔ)鍵值對(duì)以外,還可以存儲(chǔ).net框架的對(duì)象。下面介紹相應(yīng)的依賴和過(guò)期策略。

依賴和過(guò)期策略[ ]

當(dāng)向緩存中加數(shù)據(jù)時(shí),可以指定它的依賴關(guān)系來(lái)實(shí)現(xiàn)在某些情況下強(qiáng)制移除它。可用的方案包括以下幾種:

1.文件依賴(File Dependency)——當(dāng)硬盤(pán)上的某個(gè)(某些)文件更改時(shí),強(qiáng)制移除緩存數(shù)據(jù);

如:

CacheDependency cDependency = new
CacheDependency(Server.MapPath("authors.XML"));
Cache.Insert("CachedItem", item, cDependency);
2.鍵值依賴(Key Dependency)——指定緩存中的某個(gè)數(shù)據(jù)項(xiàng)更改時(shí)移除。如:
// Create a cache entry.
Cache["key1"] = "Value 1";
// Make key2 dependent on key1.
String[] dependencyKey = new String[1];
dependencyKey[0] = "key1";
CacheDependency dependency = new CacheDependency(null, dependencyKey);
Cache.Insert("key2", "Value 2", dependency);
3.基于時(shí)間的過(guò)期策略——按照預(yù)先定義的時(shí)間策略來(lái)使數(shù)據(jù)失效,可以是絕對(duì)時(shí)間(如某個(gè)日期的18:00)也可以是相對(duì)現(xiàn)在的相對(duì)時(shí)間。如:
/// Absolute expiration
Cache.Insert("CachedItem", item, null, DateTime.Now.AddSeconds(5),Cache.NoSlidingExpiration);
/// Sliding expiration
Cache.Insert("CachedItem", item, null, Cache.NoAbsoluteExpiration,
TimeSpan.FromSeconds(5));

使用太短和太長(zhǎng)的過(guò)期時(shí)間都不行,不是造成用不上的緩存數(shù)據(jù),就是緩存了陳舊的數(shù)據(jù)并加重了緩存負(fù)擔(dān),所以可以使用高并發(fā)的測(cè)試來(lái)決定過(guò)期時(shí)間的最佳值。

對(duì)緩存項(xiàng)使用優(yōu)先級(jí)

當(dāng)運(yùn)行應(yīng)用程序的服務(wù)器內(nèi)存不足時(shí),會(huì)自動(dòng)清除緩存中的數(shù)據(jù),稱為“清除scavenging”。此時(shí),Cache對(duì)象根據(jù)緩存項(xiàng)的優(yōu)先級(jí)來(lái)決定先移除哪些緩存數(shù)據(jù),你可以在代碼中指定緩存項(xiàng)的優(yōu)先級(jí)。參看MSDN中“CacheItemPriority 枚舉”,如:

Cache.Insert("DSN", connectionString, null, d, t, CacheItemPriority.High, onRemove);

刷新數(shù)據(jù)(清除緩存)

沒(méi)有直接的方法來(lái)刷新Asp.net的輸出緩存,但是有替代方法(設(shè)置所有數(shù)據(jù)失效),比如:Response.Cache.SetExpires(DateTime.Now)

這可以清除緩存,但頁(yè)面上并不立刻體現(xiàn)出來(lái),直到最初的緩存期結(jié)束,比如:<%@ OutputCache Duration="10" VaryByParam="none" %>指令指定的緩存只會(huì)在10秒后才清除。通常并不需要清除所有緩存項(xiàng),你只要重新加載數(shù)據(jù)更新緩存就夠了。

輸出緩存(Output Cache)

Page Output Caching將對(duì)頁(yè)面請(qǐng)求的響應(yīng)放入緩存中,后續(xù)對(duì)此頁(yè)面的請(qǐng)求將直接從緩存中得到信息而不是重建此頁(yè)面。可以通過(guò)添加Page指令(高級(jí)別,聲明實(shí)現(xiàn))來(lái)實(shí)現(xiàn),也可以使用HTTPCachePolicy類來(lái)實(shí)現(xiàn)(低級(jí)別,程序?qū)崿F(xiàn))。本指南不打算介紹技術(shù)細(xì)節(jié),只給出如何更好使用的指南和最佳實(shí)踐。有四方面的內(nèi)容:

  1. 決定緩存的內(nèi)容
  2. 緩存動(dòng)態(tài)頁(yè)面
  3. 控制緩存的位置
  4. 配置頁(yè)面輸出緩存

頁(yè)面片斷緩存[ ]

有時(shí)候緩存整個(gè)頁(yè)面并不靈活,同時(shí)內(nèi)存的發(fā)但也比較大,這時(shí)候應(yīng)考慮片斷緩存。頁(yè)面片斷緩存適合以下類型的數(shù)據(jù):
  • 創(chuàng)建開(kāi)銷很大的頁(yè)面片斷(控件);
  • 包含靜態(tài)數(shù)據(jù)的頁(yè)面片斷;
  • 可被多個(gè)用戶使用的頁(yè)面片斷;
  • 多個(gè)頁(yè)面共享的頁(yè)面片斷(如公用菜單條)

以下是緩存部分頁(yè)面的例子:

// Partial caching for 120 seconds
[System.Web.UI.PartialCaching(120)]
public class WebUserControl : System.Web.UI.UserControl
{
// Your Web control code
}

相關(guān)條目[ ]

參考來(lái)源[ ]