當前位置:首頁 » 硬碟大全 » 緩存方式
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

緩存方式

發布時間: 2022-02-04 12:26:23

1. 什麼叫做緩存機制

緩存是介於應用程序和物理數據源之間,其作用是為了降低應用程序對物理數據源訪問的頻次,從而提高了應用的運行性能。緩存內的數據是對物理數據源中的數據的復制,應用程序在運行時從緩存讀寫數據,在特定的時刻或事件會同步緩存和物理數據源的數據。
緩存的介質一般是內存,所以讀寫速度很快。但如果緩存中存放的數據量非常大時,也會用硬碟作為緩存介質。緩存的實現不僅僅要考慮存儲的介質,還要考慮到管理緩存的並發訪問和緩存數據的生命周期。
Hibernate的緩存包括Session的緩存和SessionFactory的緩存,其中SessionFactory的緩存又可以分為兩類:內置緩存和外置緩存。Session的緩存是內置的,不能被卸載,也被稱為Hibernate的第一級緩存。SessionFactory的內置緩存和Session的緩存在實現方式上比較相似,前者是SessionFactory對象的一些集合屬性包含的數據,後者是指Session的一些集合屬性包含的數據。SessionFactory的內置緩存中存放了映射元數據和預定義sql語句,映射元數據是映射文件中數據的拷貝,而預定義SQL語句是在Hibernate初始化階段根據映射元數據推導出來,SessionFactory的內置緩存是只讀的,應用程序不能修改緩存中的映射元數據和預定義SQL語句,因此SessionFactory不需要進行內置緩存與映射文件的同步。SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啟用這個插件。外置緩存的數據是資料庫數據的拷貝,外置緩存的介質可以是內存或者硬碟。SessionFactory的外置緩存也被稱為Hibernate的第二級緩存。

2. 前端緩存都有哪些方法,有什麼區別

瀏覽器緩存機制可以減少網路開銷,以便獲得更好的用戶體驗。在前端中常用的緩存有cookie及html中的localStorage和sessionStorage。
1、cookie、localStorage、sessionStorage區別和聯系
共同點:都是保存在瀏覽器端,且同源的。
區別:
1)cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和伺服器間來回傳遞。而sessionStorage和localStorage不會自動把數據發給伺服器,僅在本地保存。
2)cookie數據還有路徑(path)的概念,可以限制cookie只屬於某個路徑下。存儲大小限制也不同,cookie數據不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合保存很小的數據,如會話標識。
sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。
3)數據有效期不同:
sessionStorage:僅在當前瀏覽器窗口關閉前有效,自然也就不可能持久保持;
localStorage:始終有效,窗口或瀏覽器關閉也一直保存,因此用作持久數據;
cookie只在設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉。
4)作用域不同:
不同瀏覽器無法共享localStorage或sessionStorage中的信息。相同瀏覽器的不同頁面間可以共享相同的localStorage(頁面屬於相同域名和埠),但是不同頁面或標簽頁間無法共享sessionStorage的信息
cookie是在所有同源窗口中都是共享的
2、禁用cookie後,會出現什麼現象?
一般情況session是需要cookie配合使用的,但是有些瀏覽器禁用cookie後,就需要使用其他方式來實現回話管理。
在客戶端禁用Cookie的時候,我們要怎麼做呢,可以有以下兩種方法
URL重寫或者隱藏域(暴露信息不安全,一般不用)
· 設置php.ini中的session.use_trans_sid = 1或者在PHP編譯時打開–enable-trans-sid選項,讓PHP自動通過重寫URL傳遞session id。
· 如果是虛擬主機或者租用的伺服器,無法去修改PHP.ini,那麼可以手動通過URL傳值,或者通過隱藏表單傳遞session id。說簡單些就是自己去操縱sessionid這個唯一標識符,去鑒別用戶即可。
3、登陸信息一般放在session中,cookie還有用嗎?
有用,session會將sessionId存到cookie,再次請求時將sessionId隨請求頭給伺服器,然後拿到sessionId進行查詢即可。也就是說身份信息不會暴露在瀏覽器緩存中。只有sessionId暴露,提高安全性。
4、前端存cookie與後端存cookie有什麼區別?
前端可以通過document.cookie來設置cookie,但是這種方式會暴露信息,除非hash加密;
伺服器接受到http請求後在響應頭加上Set-Cookie欄位,它的值是要設置的Cookie的

3. web緩存有哪幾種方式

1 應用程序實現的動態頁面緩存
應用程序把動態文件生成的html文件緩存到文件伺服器,以後用戶請求動態文件,直接從文件伺服器載入對應的靜態緩存的html文件返回給用戶,這裡面主要節省了動態語言的執行時間和資料庫訪問時間。但是會增加了緩存框架的載入和緩存查找的時間。

2 把解釋執行的開發語言編譯成為目標代碼
這個主要把解釋執行的高級語言,例如java,php直接編譯成為平台相關的目標代碼,匯編代碼。在java裡面,比較著名的就是即時編譯器(JIT),其他的語言也要類似的機制。這裡面主要節省了就是解釋執行代碼的時間。這個會增加即時編譯的時間。

3 利用反向代理伺服器的緩存
利用類似nginx的反向代理伺服器,對請求的url對應的輸出的進行緩存。這個緩存和應用程序實現的動態頁面緩存類似,只不過用反向代理充當了應用程序的緩存實現。主要節省了動態余元執行時間和資料庫訪問時間。

4 客戶端瀏覽器緩存
客戶端瀏覽器緩存主要是通過在http頭部增加
Last-Modified,If-Modified-Since,Expires,Cache-Control等標識,和伺服器進行協商,是否是採用客戶的本機緩存來實現。
其中這裡面也會分為三種方式
1 通過Last-Modified,If-Modified-Since方式和伺服器通信,客戶發出http請求中包含If-Modified-Since,如果伺服器端代碼沒有修改,伺服器端返回302響應代碼的請求響應頭(內容不返回)客戶端則直接用本機緩存的內容緩存顯示結果。相當於節省了伺服器執行代碼時間以及數據傳輸時間。
2 通過Expires,Cache-Control控制,客戶端發現如果上次請求的頁面還未過期,通過Expires或者Cache-Control進行辨別,則直接顯示本機緩存的內容,不與伺服器進行通信。

總結一下:1 一般的高並發的應用程序,都在web層採用了以上幾種緩存,一般靜態資源(圖片,js,css)都會採用nginx反向代理+客戶端緩存來實現。
2 對於門戶網站,尤其是首頁的新聞,一般都會緩存起來,可以通過反向代理也可以通過應用程序緩存實現方式
3 對於下載或者視頻網站,由於數據傳輸比較大,直接採用瀏覽器本地緩存實現。

4. http協議支持的緩存方式有哪些

客戶端請求headers包含了請求行和一些頭域。

各種頭域:這些頭域都是有關鍵字和鍵值成對組合,最後換行回車(\r\n)結束,這些頭域告訴伺服器應該怎麼去響應以及本身一些信息。
伺服器響應

狀態行:協議版本 響應狀態 狀態描述 ------這三者用空格分開,最後換行回車(\r\n) 例如:HTTP/1.1 200 OK
各種頭域:這些頭域也是有關鍵字和鍵值成對組合,最後換行回車(\r\n)結束,這些頭域告訴客戶端應該怎麼去響應以及本身一些信息。
NO2

5. 緩存是什麼

CPU緩存(Cache Memory)是位於CPU與內存之間的臨時存儲器,它的容量比內存小但交換速度快。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度。由此可見,在CPU中加入緩存是一種高效的解決方案,這樣整個內存儲器(緩存+內存)就變成了既有緩存的高速度,又有內存的大容量的存儲系統了。緩存對CPU的性能影響很大,主要是因為CPU的數據交換順序和CPU與緩存間的帶寬引起的。

緩存的工作原理是當CPU要讀取一個數據時,首先從緩存中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。

正是這樣的讀取機制使CPU讀取緩存的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在緩存中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先緩存後內存。

最早先的CPU緩存是個整體的,而且容量很低,英特爾公司從Pentium時代開始把緩存進行了分類。當時集成在CPU內核中的緩存已不足以滿足CPU的需求,而製造工藝上的限制又不能大幅度提高緩存的容量。因此出現了集成在與CPU同一塊電路板上或主板上的緩存,此時就把 CPU內核集成的緩存稱為一級緩存,而外部的稱為二級緩存。一級緩存中還分數據緩存(Data Cache,D-Cache)和指令緩存(Instruction Cache,I-Cache)。二者分別用來存放數據和執行這些數據的指令,而且兩者可以同時被CPU訪問,減少了爭用Cache所造成的沖突,提高了處理器效能。英特爾公司在推出Pentium 4處理器時,用新增的一種一級追蹤緩存替代指令緩存,容量為12KμOps,表示能存儲12K條微指令。

隨著CPU製造工藝的發展,二級緩存也能輕易的集成在CPU內核中,容量也在逐年提升。現在再用集成在CPU內部與否來定義一、二級緩存,已不確切。而且隨著二級緩存被集成入CPU內核中,以往二級緩存與CPU大差距分頻的情況也被改變,此時其以相同於主頻的速度工作,可以為CPU提供更高的傳輸速度。

二級緩存是CPU性能表現的關鍵之一,在CPU核心不變化的情況下,增加二級緩存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二級緩存上有差異,由此可見二級緩存對於CPU的重要性。

CPU在緩存中找到有用的數據被稱為命中,當緩存中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。從理論上講,在一顆擁有二級緩存的CPU中,讀取一級緩存的命中率為80%。也就是說CPU一級緩存中找到的有用數據占數據總量的80%,剩下的20%從二級緩存中讀取。由於不能准確預測將要執行的數據,讀取二級緩存的命中率也在80%左右(從二級緩存讀到有用的數據占總數據的16%)。那麼還有的數據就不得不從內存調用,但這已經是一個相當小的比例了。目前的較高端的CPU中,還會帶有三級緩存,它是為讀取二級緩存後未命中的數據設計的—種緩存,在擁有三級緩存的CPU中,只有約5%的數據需要從內存中調用,這進一步提高了CPU的效率。

為了保證CPU訪問時有較高的命中率,緩存中的內容應該按一定的演算法替換。一種較常用的演算法是「最近最少使用演算法」(LRU演算法),它是將最近一段時間內最少被訪問過的行淘汰出局。因此需要為每行設置一個計數器,LRU演算法是把命中行的計數器清零,其他各行計數器加1。當需要替換時淘汰行計數器計數值最大的數據行出局。這是一種高效、科學的演算法,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出緩存,提高緩存的利用率。

CPU產品中,一級緩存的容量基本在4KB到64KB之間,二級緩存的容量則分為128KB、256KB、512KB、1MB、2MB等。一級緩存容量各產品之間相差不大,而二級緩存容量則是提高CPU性能的關鍵。二級緩存容量的提升是由CPU製造工藝所決定的,容量增大必然導致CPU內部晶體管數的增加,要在有限的CPU面積上集成更大的緩存,對製造工藝的要求也就越高。

雙核心CPU的二級緩存比較特殊,和以前的單核心CPU相比,最重要的就是兩個內核的緩存所保存的數據要保持一致,否則就會出現錯誤,為了解決這個問題不同的CPU使用了不同的辦法:

Intel雙核心處理器的二級緩存
目前Intel的雙核心CPU主要有Pentium D、Pentium EE、Core Duo三種,其中Pentium D、Pentium EE的二級緩存方式完全相同。Pentium D和Pentium EE的二級緩存都是CPU內部兩個內核具有互相獨立的二級緩存,其中,8xx系列的Smithfield核心CPU為每核心1MB,而9xx系列的Presler核心CPU為每核心2MB。這種CPU內部的兩個內核之間的緩存數據同步是依靠位於主板北橋晶元上的仲裁單元通過前端匯流排在兩個核心之間傳輸來實現的,所以其數據延遲問題比較嚴重,性能並不盡如人意。
Core Duo使用的核心為Yonah,它的二級緩存則是兩個核心共享2MB的二級緩存,共享式的二級緩存配合Intel的「Smart cache」共享緩存技術,實現了真正意義上的緩存數據同步,大幅度降低了數據延遲,減少了對前端匯流排的佔用,性能表現不錯,是目前雙核心處理器上最先進的二級緩存架構。今後Intel的雙核心處理器的二級緩存都會採用這種兩個內核共享二級緩存的「Smart cache」共享緩存技術。

AMD雙核心處理器的二級緩存
Athlon 64 X2 CPU的核心主要有Manchester和Toledo兩種,他們的二級緩存都是CPU內部兩個內核具有互相獨立的二級緩存,其中,Manchester核心為每核心512KB,而Toledo核心為每核心1MB。處理器內部的兩個內核之間的緩存數據同步是依靠CPU內置的System Request Interface(系統請求介面,SRI)控制,傳輸在CPU內部即可實現。這樣一來,不但CPU資源佔用很小,而且不必佔用內存匯流排資源,數據延遲也比Intel的Smithfield核心和Presler核心大為減少,協作效率明顯勝過這兩種核心。不過,由於這種方式仍然是兩個內核的緩存相互獨立,從架構上來看也明顯不如以Yonah核心為代表的Intel的共享緩存技術

6. 常用的緩存技術

第一章 常用的緩存技術
1、常見的兩種緩存

本地緩存:不需要序列化,速度快,緩存的數量與大小受限於本機內存
分布式緩存:需要序列化,速度相較於本地緩存較慢,但是理論上緩存的數量與大小無限(因為緩存機器可以不斷擴展)
2、本地緩存

Google guava cache:當下最好用的本地緩存
Ehcache:spring默認集成的一個緩存,以spring cache的底層緩存實現類形式去操作緩存的話,非常方便,但是欠缺靈活,如果想要靈活使用,還是要單獨使用Ehcache
Oscache:最經典簡單的頁面緩存
3、分布式緩存

memcached:分布式緩存的標配
Redis:新一代的分布式緩存,有替代memcached的趨勢
3.1、memcached

經典的一致性hash演算法
基於slab的內存模型有效防止內存碎片的產生(但同時也需要估計好啟動參數,否則會浪費很多的內存)
集群中機器之間互不通信(相較於Jboss cache等集群中機器之間的相互通信的緩存,速度更快<--因為少了同步更新緩存的開銷,且更適合於大型分布式系統中使用)
使用方便(這一點是相較於Redis在構建客戶端的時候而言的,盡管redis的使用也不困難)
很專一(專做緩存,這一點也是相較於Redis而言的)
3.2、Redis

可以存儲復雜的數據結構(5種)
strings-->即簡單的key-value,就是memcached可以存儲的唯一的一種形式,接下來的四種是memcached不能直接存儲的四種格式(當然理論上可以先將下面的一些數據結構中的東西封裝成對象,然後存入memcached,但是不推薦將大對象存入memcached,因為memcached的單一value的最大存儲為1M,可能即使採用了壓縮演算法也不夠,即使夠,可能存取的效率也不高,而redis的value最大為1G)
hashs-->看做hashTable
lists-->看做LinkedList
sets-->看做hashSet,事實上底層是一個hashTable
sorted sets-->底層是一個skipList
有兩種方式可以對緩存數據進行持久化
RDB
AOF
事件調度
發布訂閱等
4、集成緩存

專指spring cache,spring cache自己繼承了ehcache作為了緩存的實現類,我們也可以使用guava cache、memcached、redis自己來實現spring cache的底層。當然,spring cache可以根據實現類來將緩存存在本地還是存在遠程機器上。

5、頁面緩存

在使用jsp的時候,我們會將一些復雜的頁面使用Oscache進行頁面緩存,使用非常簡單,就是幾個標簽的事兒;但是,現在一般的企業,前台都會使用velocity、freemaker這兩種模板引擎,本身速度就已經很快了,頁面緩存使用的也就很少了。

總結:

在實際生產中,我們通常會使用guava cache做本地緩存+redis做分布式緩存+spring cache就集成緩存(底層使用redis來實現)的形式
guava cache使用在更快的獲取緩存數據,同時緩存的數據量並不大的情況
spring cache集成緩存是為了簡單便捷的去使用緩存(以註解的方式即可),使用redis做其實現類是為了可以存更多的數據在機器上
redis緩存單獨使用是為了彌補spring cache集成緩存的不靈活
就我個人而言,如果需要使用分布式緩存,那麼首先redis是必選的,因為在實際開發中,我們會緩存各種各樣的數據類型,在使用了redis的同時,memcached就完全可以舍棄了,但是現在還有很多公司在同時使用memcached和redis兩種緩存。

7. php 緩存方式有哪幾種呢 都在什麼情況下使用呢

PHP緩存技術 WEB程序獲取信息的方式主要是查詢資料庫,當資料庫不是很大的情況下不會有太大的問題.然而,隨著網站的發展,資料庫呈幾何級數的方式增長的時候,就會出現瓶頸.於是PHP緩存技術誕生了.PHP緩存技術工作時,當程序查詢數據的時候,會把相應的結果序列化後保存到文件中,以後同樣的查詢語句就可以不用直接查詢資料庫,而是從緩存文件中獲得。這一改進使得程序運行速度得以太幅度提升.
目前應用PHP緩存技術比較流行的方法主要是Adodb+Smarty這樣的黃金搭檔.
PHP緩存技術工作原理:
首先看看adodb提供的數據緩存功能:
1<?php
2include('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?> 如上,每次查詢數據的時候,會把相應的結果序列化後保存到文件中,以後同樣的查詢語句就可以不用直接查詢資料庫,而是從緩存文件中獲得。
再來看看Smarty提供的頁面緩存功能:
1<?php
2require('Smarty.class.php');
3$smarty = new Smarty;
4$smarty->caching = true;
5if(!$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?>
12
如上,每次訪問頁面的時候,都會先檢測相應的緩存是否存在,如果不存在,就連接資料庫,得到數據,完成模板變數的賦值,顯示頁面,同時生成緩存文件,這樣下次訪問的時候緩存文件就發揮作用了,而不會再執行if塊的數據查詢語句了。當然,在實際使用中會有很多東西要考慮,比如,有效期的設置,緩存組的設置等等,具體可以查看Smarty手冊中有關緩存(caching)的相關章節。
以上兩個PHP流行組件緩存方式的側重點是不同的,對於Adodb的緩存而言,它緩存的是數據,對於Smarty的緩存而言,它緩存的是頁面。其他提供緩存功能的組件還有很多(如:PEAR::Cache_Lite等等),實際編程中使用哪個方案要具體情況具體分析,也可能會綜合使用。
使用這些組件內置的緩存方案有一個很明顯的好處是它們的實現對客戶端而言都很透明。只要進行必要的設置(如:緩存時間,緩存目錄等等)就可以了,而不用過多考慮實現緩存的細節問題,系統會根據設置自動管理緩存。但是其缺點也同樣明顯,因為每次請求仍然要用PHP解析一遍,效率和純靜態相比還是大打折扣,在大的PV面前還是不能滿足要求,在這種情況下,僅僅做動態緩存就不夠了,必須實現靜態緩存。
PHP,一門最近幾年興起的web設計腳本語言,由於它的強大和可伸縮性,近幾年來得到長足的發展,php相比傳統的asp網站,在速度上有絕對的優勢,想mssql轉6萬條數據php如需要40秒,asp不下2分鍾.但是,由於網站的數據越來越多,我們渴求能更快速的調用數據,不必要每次都從資料庫掉,我們可以從其他的地方,比方一個文件,或者某個內存地址,這就是php的緩存技術,也就是Cache技術.

8. 緩存的增加緩存的方法

點擊電腦桌面上的「開始」/「運行」,鍵入「Msconfig」啟動「系統配置實用程序」,跟著選中「system.ini」標簽下的「Vcache」項,就可以根據系統的實際情況來調節硬碟的緩存了。在該選項中一般會有三行內容:ChunkSize=1024、MaxFileCache=10240和MinFileCache=10240;其中第一行是緩沖區讀寫單元值,第二、三行是硬碟的最大和最小緩沖值,等號後的數值都是可以修改的,只要右鍵單擊選中任一行就可以進行修改了。如果你的內存是128MB的話,上面這三行的取值就比較合理了,當然也可以自定。如果不知道該如何設置合適的緩沖值,請「Windows優化大師」幫忙吧,這個軟體中有一個「磁碟緩存優化」項,用滑鼠就可以方便地設置好緩存;又或者讓「Windows優化大師」自動幫你進行優化設置。當硬碟的緩存值足夠大時,硬碟就不用頻繁地讀寫磁碟,一來可以延長硬碟的壽命,二來也可以提高數據的傳輸速度。
另外,將硬碟的「文件系統緩存」設置為「網路伺服器」,可以加快系統對硬碟的訪問速度,因為文件系統緩存里存放了硬碟最近被訪問過的文件名和路徑,緩存越大所能儲存的內容也就越多。如果點擊「控制面板」/「系統」/「性能」/「文件系統」/「硬碟」,將「此計算機的主要用途」由「台式機」改為「網路伺服器」,可以將原來10K左右的緩存增加至近50K左右。 一般來說,軟碟機讀寫數據的速度都比較慢,這是因為碟片的轉速不能太高,但是,我們可以提高軟碟機的讀寫緩存,讓軟碟機一次讀寫更多的數據。方法是:在桌面上的「開始」/「運行」框中鍵入「Regedit」運行注冊表編輯器,依次進入HKEY-LOCAL-000,新建一個為ForeFifo的「DWORD值」,將其值設為「0」,這樣就對軟碟機進行了軟提速。很多人都知道右鍵單擊桌面「我的電腦」圖標,選「屬性」/「性能」/「文件系統」/「CD-ROM」,將最佳的訪問方式設為「四倍速或更高速」,將追加的高速緩存大小滑塊拖到最大處,可以明顯提高光碟機的讀盤速度。除了這種方式,我們還可以在注冊表中設置緩沖值,方法是:進入到注冊表,在HKEY-LOCAL-下,將CacheSize(緩存值的大小)和Prefetch(預讀文件大小)兩項進行手工調整,只要右鍵單擊要選的項就可以進行修改了。

9. c#中的緩存幾種方式

如果你用的是IE瀏覽器就是有個e圖標的,
就關閉瀏覽器。然後右鍵點擊IE圖標-屬性,
點擊第二行中間的「刪除文件」就可以清理臨時的文件了。
如果你用的是其他瀏覽器,
通常會在瀏覽器窗口右上角的工具菜單清理上網記錄
文字會有一點不同是正常的,不同的瀏覽器用不同的名字
就可以清理了,不過如果是Firefox不太推薦用這個。
你也可以試試這個,把這行文字復制到記事本那裡去。