Ⅰ 什麼叫緩存
所謂的緩存,就是將程序或系統經常要調用的對象存在內存中,一遍其使用時可以快速調用,不必再去創建新的重復的實例。這樣做可以減少系統開銷,提高系統效率。
1、通過文件緩存;顧名思義文件緩存是指把數據存儲在磁碟上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;
2、內存緩存;也就是創建一個靜態內存區域,將數據存儲進去,例如我們B/S架構的將數據存儲在Application中或者存儲在一個靜態Map中。
3、本地內存緩存;就是把數據緩存在本機的內存中。
4、分布式緩存機制;可能存在跨進程,跨域訪問緩存數據
對於分布式的緩存,此時因為緩存的數據是放在緩存伺服器中的,或者說,此時應用程序需要跨進程的去訪問分布式緩存伺服器。
(1)常見的緩存系有哪些擴展閱讀
當我們在應用中使用跨進程的緩存機制,例如分布式緩存memcached或者微軟的AppFabric,此時數據被緩存在應用程序之外的進程中。
每次,當我們要把一些數據緩存起來的時候,緩存的API就會把數據首先序列化為位元組的形式,然後把這些位元組發送給緩存伺服器去保存。
同理,當我們在應用中要再次使用緩存的數據的時候,緩存伺服器就會將緩存的位元組發送給應用程序,而緩存的客戶端類庫接受到這些位元組之後就要進行反序列化的操作了,將之轉換為我們需要的數據對象。
Ⅱ JAVA目前比較常用的緩存有哪些 集中式緩存與分布式緩存有何區別 它們應用場景是
java目前常用的緩存:
Generic
JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, etc)
EhCache 2.x
Hazelcast
Infinispan
Couchbase
Redis
Caffeine
Guava (deprecated)
Simple
建議使用spring boot集成方式,可插拔,簡單。
集中式緩存適用場景:
1、伺服器集群部署。
2、數據高一致性(任何數據變化都能及時的被查詢到)
分布式緩存適用場景:
系統需要緩存的數據量大
對數據的可用性較高的情況
需要橫向擴展,從而達到緩存的容量無限的要求
Ⅲ EhCache 分布式緩存/緩存集群
一 緩存系統簡介 EhCache 是一個純 Java 的進程內緩存框架 具有快速 精乾等特點 是 Hibernate 中默認的 CacheProvider EhCache 應用架構圖 下圖是 EhCache 在應用程序中的位置
EhCache 的主要特性有 快速 精幹 簡單 多種緩存策略 緩存數據有兩級 內存和磁碟 因此無需擔心容量問題 緩存數據會在虛擬機重啟的過程中寫入磁碟 可以通過 RMI 可插入 API 等方式進行分布式緩存 具有緩存和緩存管理器的偵聽介面 支持多緩存管理器實例 以及一個實例的多個緩存區域 提供 Hibernate 的緩存實現 由於 EhCache 是進程中的緩存系統 一旦將應用部署在集群環境中 每一個節點維護各自的緩存數據 當某個節點對緩存數據進行更新 這些更新的數據無法在其它節點 *** 享 這不僅會降低節點運行的效率 而且會導致數據不同步的情況發生 例如某個網站採用 A B 兩個節點作為集群部署 當 A 節點的緩存更新後 而 B 節點緩存尚未更新就可能出現用戶在瀏覽頁面的時候 一會是更新後的數據 一會是尚未更新的數據 盡管我們也可以通過 Session Sticky 技術來將用戶鎖定在某個節點上 但對於一些交互性比較強或者是非 Web 方式的系統來說 Session Sticky 顯然不太適合 所以就需要用到 EhCache 的集群解決方案 從 版本開始 Ehcache可以使用分布式的緩存了 EhCache 從 版本開始 支持五種集群方案 分別是 ? Terracotta ? RMI ? JMS ? JGroups ? EhCache Server 其中的三種最為常用集群方式 分別是 RMI JGroups 以及 EhCache Server 本文主要介紹RMI的方式 分布式這個特性是以plugin的方式實現的 Ehcache自帶了一些默認的分布式緩存插件實現 這些插件可以滿足大部分應用的需要 如果需要使用其他的插件那就需要自己開發了 開發者可以通過查看distribution包里的源代碼及JavaDoc來實現它 盡管不是必須的 在使用分布式緩存時理解一些ehcahce的設計思想也是有幫助的 這可以參看分布式緩存設計的頁面 以下的部分將展示如何讓分布式插件同ehcache一起工作 下面列出的是一些分布式緩存中比較重要的方面 ? 你如何知道集群環境中的其他緩存? ? 分布式傳送的消息是什麼形式? ? 什麼情況需要進行復制?增加(Puts) 更新(Updates)或是失效(Expiries)? ? 採用什麼方式進行復制?同步還是非同步方式? 為了安裝分布式緩存 你需要配置一個PeerProvider 一個CacheManagerPeerListener 它們對於一個CacheManager來說是全局的 每個進行分布式操作的cache都要添加一個cacheEventListener來傳送消息
二 集群緩存概念及其配置 正確的元素類型 只有可序列化的元素可以進行復制 一些操作 比如移除 只需要元素的鍵值而不用整個元素 在這樣的操作中即使元素不是可序列化的但鍵值是可序列化的也可以被復制 成員發現(Peer Discovery) Ehcache進行集群的時候有一個cache組的概念 每個cache都是其他cache的一個peer 沒有主cache的存在 剛才我們問了一個問題 你如何知道集群環境中的其他緩存?這個問題可以命名為成員發現(Peer Discovery) Ehcache提供了兩種機制用來進行成員發現 就像一輛汽車 手動檔和自動檔 要使用一個內置的成員發現機制要在ehcache的配置文件中指定元素的class屬性為 net sf ehcache distribution 自動的成員發現 自動的發現方式用TCP廣播機制來確定和維持一個廣播組 它只需要一個簡單的配置可以自動的在組中添加和移除成員 在集群中也不需要什麼優化伺服器的知識 這是默認推薦的 成員每秒向群組發送一個 心跳 如果一個成員 秒種都沒有發出信號它將被群組移除 如果一個新的成員發送了一個 心跳 它將被添加進群組 任何一個用這個配置安裝了復制功能的cache都將被其他的成員發現並標識為可用狀態 要設置自動的成員發現 需要指定ehcache配置文件中元素的properties屬性 就像下面這樣 peerDiscovery=automatic multicastGroupAddress=multicast address | multicast host name multicastGroupPort=port timeToLive= (timeToLive屬性詳見常見問題部分的描述) 示例 假設你在集群中有兩台伺服器 你希望同步sampleCache 和sampleCache 每台獨立的伺服器都要有這樣的配置 配置server 和server <class= net sf ehcache distribution properties= peerDiscovery=automatic multicastGroupAddress= />multicastGroupPort= timeToLive= 手動進行成員發現 進行手動成員配置要知道每個監聽器的IP地址和埠 成員不能在運行時動態地添加和移除 在技術上很難使用廣播的情況下就可以手動成員發現 例如在集群的伺服器之間有一個不能傳送廣播報文的路由器 你也可以用手動成員發現進行單向的數據復制 只讓server 知道server 而server 不知道server 配置手動成員發現 需要指定ehcache配置文件中的properties屬性 像下面這樣 peerDiscovery=manual rmiUrls=//server:port/cacheName //server:port/cacheName … rmiUrls配置的是伺服器cache peers的列表 注意不要重復配置 示例 假設你在集群中有兩台伺服器 你要同步sampleCache 和sampleCache 下面是每個伺服器需要的配置 配置server <class= net sf ehcache distribution properties= peerDiscovery=manual />rmiUrls=//server : /sampleCache |//server : /sampleCache 配置server <class= net sf ehcache distribution properties= peerDiscovery=manual />rmiUrls=//server : /sampleCache |//server : /sampleCache 配置CacheManagerPeerListener 每個CacheManagerPeerListener監聽從成員們發向當前CacheManager的消息 配置CacheManagerPeerListener需要指定一個 它以插件的機制實現 用來創建CacheManagerPeerListener 的屬性有 class – 一個完整的工廠類名 properties – 只對這個工廠有意義的屬性 使用逗號分隔 Ehcache有一個內置的基於RMI的分布系統 它的監聽器是RMICacheManagerPeerListener 這個監聽器可以用 RMI來配置 <class= net sf ehcache distribution RMI properties= hostName=localhost port= />socketTimeoutMillis= 有效的屬性是 hostname (可選) – 運行監聽器的伺服器名稱 標明了做為集群群組的成員的地址 同時也是你想要控制的從集群中接收消息的介面在CacheManager初始化的時候會檢查hostname是否可用 如果hostName不可用 CacheManager將拒絕啟動並拋出一個連接被拒絕的異常 如果指定 hostname將使用InetAddress getLocalHost() getHostAddress()來得到 警告 不要將localhost配置為本地地址 因為它在網路中不可見將會導致不能從遠程伺服器接收信息從而不能復制 在同一台機器上有多個CacheManager的時候 你應該只用localhost來配置 port – 監聽器監聽的埠 socketTimeoutMillis (可選) – Socket超時的時間 默認是 ms 當你socket同步緩存請求地址比較遠 不是本地區域網 你可能需要把這個時間配置大些 不然很可能延時導致同步緩存失敗 配置CacheReplicators 每個要進行同步的cache都需要設置一個用來向CacheManagerr的成員復制消息的緩存事件監聽器 這個工作要通過為每個cache的配置增加一個cacheEventListenerFactory元素來完成 <! Sample cache named sampleCache ><cache name= sampleCache maxElementsInMemory= eternal= false timeToIdleSeconds= timeToLiveSeconds= overflowToDisk= false ><cacheEventListenerFactory class= net sf ehcache distribution RMICacheReplicatorFactory properties= replicateAsynchronously=true replicatePuts=true replicateUpdates=true replicateUpdatesViaCopy=false replicateRemovals=true /></cache>class – 使用net sf ehcache distribution RMICacheReplicatorFactory 這個工廠支持以下屬性 replicatePuts=true | false – 當一個新元素增加到緩存中的時候是否要復制到其他的peers 默認是true replicateUpdates=true | false – 當一個已經在緩存中存在的元素被覆蓋時是否要進行復制 默認是true replicateRemovals= true | false – 當元素移除的時候是否進行復制 默認是true replicateAsynchronously=true | false – 復制方式是非同步的(指定為true時)還是同步的(指定為false時) 默認是true replicatePutsViaCopy=true | false – 當一個新增元素被拷貝到其他的cache中時是否進行復制指定為true時為復制 默認是true replicateUpdatesViaCopy=true | false – 當一個元素被拷貝到其他的cache中時是否進行復制(指定為true時為復制) 默認是true 你可以使用ehcache的默認行為從而減少配置的工作量 默認的行為是以非同步的方式復制每件事 你可以像下面的例子一樣減少RMICacheReplicatorFactory的屬性配置 <! Sample cache named sampleCache All missing RMICacheReplicatorFactory properties default to true ><cache name= sampleCache maxElementsInMemory= eternal= true overflowToDisk= false memoryStoreEvictionPolicy= LFU ><cacheEventListenerFactory class= net sf ehcache distribution RMICacheReplicatorFactory /></cache> 常見的問題 Windows上的Tomcat 有一個Tomcat或者是JDK的bug 在tomcat啟動時如果tomcat的安裝路徑中有空格的話 在啟動時RMI監聽器會失敗 參見 bin/wa?A =ind &L=rmi users&P= 和 doc/faq howto bugs/l 由於在Windows上安裝Tomcat默認是裝在 Program Files 文件夾里的 所以這個問題經常發生 廣播阻斷 自動的peer discovery與廣播息息相關 廣播可能被路由阻攔 像Xen和VMWare這種虛擬化的技術也可以阻攔廣播 如果這些都打開了 你可能還在要將你的網卡的相關配置打開 一個簡單的辦法可以告訴廣播是否有效 那就是使用ehcache remote debugger來看 心跳 是否可用 廣播傳播的不夠遠或是傳得太遠 你可以通過設置badly misnamed time to live來控制廣播傳播的距離 用廣播IP協議時 timeToLive的值指的是數據包可以傳遞的域或是范圍 約定如下 是限制在同一個伺服器 是限制在同一個子網 是限制在同一個網站 是限制在同一個region 是限制在同一個大洲 是不限制 譯者按 上面這些資料翻譯的不夠准確 請讀者自行尋找原文理解吧 在Java實現中默認值是 也就是在同一個子網中傳播 改變timeToLive屬性可以限制或是擴展傳播的范圍
三 RMI方式緩存集群/配置分布式緩存 RMI 是 Java 的一種遠程方法調用技術 是一種點對點的基於 Java 對象的通訊方式 EhCache 從 版本開始就支持 RMI 方式的緩存集群 在集群環境中 EhCache 所有緩存對象的鍵和值都必須是可序列化的 也就是必須實現 java io Serializable 介面 這點在其它集群方式下也是需要遵守的 下圖是 RMI 集群模式的結構圖
採用 RMI 集群模式時 集群中的每個節點都是對等關系 並不存在主節點或者從節點的概念 因此節點間必須有一個機制能夠互相認識對方 必須知道其它節點的信息 包括主機地址 埠號等 EhCache 提供兩種節點的發現方式 手工配置和自動發現 手工配置方式要求在每個節點中配置其它所有節點的連接信息 一旦集群中的節點發生變化時 需要對緩存進行重新配置 由於 RMI 是 Java 中內置支持的技術 因此使用 RMI 集群模式時 無需引入其它的 Jar 包 EhCache 本身就帶有支持 RMI 集群的功能 使用 RMI 集群模式需要在 ehcache xml 配置文件中定義 節點 分布式同步緩存要讓這邊的cache知道對方的cache 叫做Peer Discovery(成員發現) EHCache實現成員發現的方式有兩種 手動查找 A 在ehcache xml中配置PeerDiscovery成員發現對象 Server 配置 配置本地hostName port是 分別監聽 : 的mobileCache和 : 的mobileCache 注意這里的mobileCache是緩存的名稱 分別對應著server server 的cache的配置 <?xml version= encoding= gbk ?><ehcache xmlns:xsi= instance xsi:noNamespaceSchemaLocation= ehcache xsd > <diskStore path= java io tmpdir /> <! 集群多台伺服器中的緩存 這里是要同步一些伺服器的緩存 server hostName: port: cacheName:mobileCache server hostName: port: cacheName:mobileCache server hostName: port: cacheName:mobileCache 注意 每台要同步緩存的伺服器的RMI通信socket埠都不一樣 在配置的時候注意設置 > <! server 的配置 > < class= net sf ehcache distribution properties= hostName=localhost port= socketTimeoutMillis= peerDiscovery=manual rmiUrls=// : /mobileCache|// : /mobileCache /></ehcache>以上注意元素出現的位置在diskStore下
同樣在你的另外 台伺服器上增加配置 Server 配置本地host port為 分別同步 : 的mobileCache和 : 的mobileCache <! server 的配置 >< class= net sf ehcache distribution properties= hostName=localhost port= socketTimeoutMillis= peerDiscovery=manual rmiUrls=// : /mobileCache|// : /mobileCache />Server 配置本地host port為 分別同步 : 的mobileCache緩存和 : 的mobileCache緩存 <! server 的配置 >< class= net sf ehcache distribution properties= hostName=localhost port= socketTimeoutMillis= peerDiscovery=manual rmiUrls=// : /mobileCache|// : /mobileCache />這樣就在三台不同的伺服器上配置了手動查找cache的PeerProvider成員發現的配置了 值得注意的是你在配置rmiUrls的時候要特別注意url不能重復出現 並且埠 地址都是對的 如果指定 hostname將使用InetAddress getLocalHost() getHostAddress()來得到 警告 不要將localhost配置為本地地址 因為它在網路中不可見將會導致不能從遠程伺服器接收信息從而不能復制 在同一台機器上有多個CacheManager的時候 你應該只用localhost來配置 B 下面配置緩存和緩存同步監聽 需要在每台伺服器中的ehcache xml文件中增加cache配置和cacheEventListenerFactory cacheLoaderFactory的配置 <defaultCache maxElementsInMemory= eternal= false timeToIdleSeconds= timeToLiveSeconds= overflowToDisk= false /><! 配置自定義緩存 maxElementsInMemory:緩存中允許創建的最大對象數 eternal:緩存中對象是否為永久的 如果是 超時設置將被忽略 對象從不過期 timeToIdleSeconds:緩存數據空閑的最大時間 也就是說如果有一個緩存有多久沒有被訪問就會被銷毀 如果該值是 就意味著元素可以停頓無窮長的時間 timeToLiveSeconds:緩存數據存活的時間 緩存對象最大的的存活時間 超過這個時間就會被銷毀 這只能在元素不是永久駐留時有效 如果該值是 就意味著元素可以停頓無窮長的時間 overflowToDisk:內存不足時 是否啟用磁碟緩存 memoryStoreEvictionPolicy:緩存滿了之後的淘汰演算法 每一個小時更新一次緩存( 小時過期) ><cache name= mobileCache maxElementsInMemory= eternal= false overflowToDisk= true timeToIdleSeconds= timeToLiveSeconds= memoryStoreEvictionPolicy= LFU > <! RMI緩存分布同步查找 class使用net sf ehcache distribution RMICacheReplicatorFactory 這個工廠支持以下屬性 replicatePuts=true | false – 當一個新元素增加到緩存中的時候是否要復制到其他的peers 默認是true replicateUpdates=true | false – 當一個已經在緩存中存在的元素被覆蓋時是否要進行復制 默認是true replicateRemovals= true | false – 當元素移除的時候是否進行復制 默認是true replicateAsynchronously=true | false – 復制方式是非同步的 指定為true時 還是同步的 指定為false時 默認是true replicatePutsViaCopy=true | false – 當一個新增元素被拷貝到其他的cache中時是否進行復制 指定為true時為復制 默認是true replicateUpdatesViaCopy=true | false – 當一個元素被拷貝到其他的cache中時是否進行復制 指定為true時為復制 默認是true = > <! 監聽RMI同步緩存對象配置 注冊相應的的緩存監聽類 用於處理緩存事件 如put remove update 和expire > <cacheEventListenerFactory class= net sf ehcache distribution RMICacheReplicatorFactory properties= replicateAsynchronously=true /> replicatePuts=true replicateUpdates=true replicateUpdatesViaCopy=false replicateRemovals=true <! 用於在初始化緩存 以及自動設置 > <bootstrapCacheLoaderFactory class= net sf ehcache bootstrap BootstrapCacheLoaderFactory /></cache> C 這樣就完成了 台伺服器的配置 下面給出server 的完整的ehcache xml的配置 <?xml version= encoding= gbk ?><ehcache xmlns:xsi= instance xsi:noNamespaceSchemaLocation= ehcache xsd > <diskStore path= java io tmpdir /> <!集群多台伺服器中的緩存 這里是要同步一些伺服器的緩存 server hostName: port: cacheName:mobileCache server hostName: port: cacheName:mobileCache server hostName: port: cacheName:mobileCache 注意每台要同步緩存的伺服器的RMI通信socket埠都不一樣 在配置的時候注意設置 > <! server 的配置 > < class= net sf ehcache distribution properties= hostName=localhost port= socketTimeoutMillis= peerDiscovery=manual rmiUrls=// : /mobileCache|// : /mobileCache /> <defaultCache maxElementsInMemory= eternal= false timeToIdleSeconds= timeToLiveSeconds= overflowToDisk= false /> <! 配置自定義緩存 maxElementsInMemory:緩存中允許創建的最大對象數 eternal:緩存中對象是否為永久的 如果是 超時設置將被忽略 對象從不過期 timeToIdleSeconds:緩存數據空閑的最大時間 也就是說如果有一個緩存有多久沒有被訪問就會被銷毀 如果該值是 就意味著元素可以停頓無窮長的時間 timeToLiveSeconds:緩存數據存活的時間 緩存對象最大的的存活時間 超過這個時間就會被銷毀 這只能在元素不是永久駐留時有效 如果該值是 就意味著元素可以停頓無窮長的時間 overflowToDisk:內存不足時 是否啟用磁碟緩存 memoryStoreEvictionPolicy:緩存滿了之後的淘汰演算法 每一個小時更新一次緩存( 小時過期) > <cache name= mobileCache maxElementsInMemory= eternal= false overflowToDisk= true timeToIdleSeconds= timeToLiveSeconds= memoryStoreEvictionPolicy= LFU > <! RMI緩存分布同步查找 class使用net sf ehcache distribution RMICacheReplicatorFactory 這個工廠支持以下屬性 replicatePuts=true | false – 當一個新元素增加到緩存中的時候是否要復制到其他的peers 默認是true replicateUpdates=true | false – 當一個已經在緩存中存在的元素被覆蓋時是否要進行復制 默認是true replicateRemovals= true | false – 當元素移除的時候是否進行復制 默認是true replicateAsynchronously=true | false – 復制方式是非同步的 指定為true時 還是同步的 指定為false時 默認是true replicatePutsViaCopy=true | false – 當一個新增元素被拷貝到其他的cache中時是否進行復制 指定為true時為復制 默認是true replicateUpdatesViaCopy=true | false – 當一個元素被拷貝到其他的cache中時是否進行復制 指定為true時為復制 默認是true = > <! 監聽RMI同步緩存對象配置 注冊相應的的緩存監聽類 用於處理緩存事件 如put remove update 和expire > <cacheEventListenerFactory class= net sf ehcache distribution RMICacheReplicatorFactory properties= replicateAsynchronously=true /> replicatePuts=true replicateUpdates=true replicateUpdatesViaCopy=false replicateRemovals=true <! 用於在初始化緩存 以及自動設置 > <bootstrapCacheLoaderFactory class= net sf ehcache bootstrap BootstrapCacheLoaderFactory /> </cache></ehcache> 自動發現 自動發現配置和手動查找的方式有一點不同 其他的地方都基本是一樣的 同樣在ehcache xml中增加配置 配置如下 <! 搜索某個網段上的緩存timeToLive 是限制在同一個伺服器 是限制在同一個子網 是限制在同一個網站 是限制在同一個region 是限制在同一個大洲 是不限制 >< class= net sf ehcache distribution properties= peerDiscovery=automatic multicastGroupAddress= multicastGroupPort= timeToLive= /> lishixin/Article/program/Java/hx/201311/25706
Ⅳ 計算機硬體系統中主要的高速緩存有哪些,分別簡述其作用
CPU緩存,有利於提高運行與載入速度。硬碟緩存,有利於提高打開硬碟與下載速度,延長硬碟壽命。顯卡有顯存,顯存越大,圖像就表現越細膩清晰。列印機有內存,內存越大,列印速度也越快
Ⅳ 網路中的緩存是什麼
CPU緩存(Cache Memory)位於CPU與內存之間的臨時存儲器,它的容量比內存小但交換速度快。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度。由此可見,在CPU中加入緩存是一種高效的解決方案,這樣整個內存儲器(緩存+內存)就變成了既有緩存的高速度,又有內存的大容量的存儲系統了。緩存對CPU的性能影響很大,主要是因為CPU的數據交換順序和CPU與緩存間的帶寬引起的。
緩存是為了解決CPU速度和內存速度的速度差異問題。內存中被CPU訪問最頻繁的數據和指令被復制入CPU中的緩存,這樣CPU就可以不經常到象「蝸牛」一樣慢的內存中去取數據了,CPU只要到緩存中去取就行了,而緩存的速度要比內存快很多。
這里要特別指出的是:
1.因為緩存只是內存中少部分數據的復製品,所以CPU到緩存中尋找數據時,也會出現找不到的情況(因為這些數據沒有從內存復制到緩存中去),這時CPU還是會到內存中去找數據,這樣系統的速度就慢下來了,不過CPU會把這些數據復制到緩存中去,以便下一次不要再到內存中去取。
2.因為隨著時間的變化,被訪問得最頻繁的數據不是一成不變的,也就是說,剛才還不頻繁的數據,此時已經需要被頻繁的訪問,剛才還是最頻繁的數據,現在又不頻繁了,所以說緩存中的數據要經常按照一定的演算法來更換,這樣才能保證緩存中的數據是被訪問最頻繁的。
緩存的工作原理
[編輯本段]
緩存的工作原理是當CPU要讀取一個數據時,首先從緩存中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。
正是這樣的讀取機制使CPU讀取緩存的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在緩存中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先緩存後內存。
一級緩存和二級緩存
[編輯本段]
為了分清這兩個概念,我們先了解一下RAM 。RAM和ROM相對的,RAM是掉電以後,其中的信息就消失那一種,ROM在掉電以後信息也不會消失那一種。
RAM又分兩種,一種是靜態RAM,SRAM;一種是動態RAM,DRAM。前者的存儲速度要比後者快得多,我們現在使用的內存一般都是動態RAM。
有的菜鳥就說了,為了增加系統的速度,把緩存擴大不就行了嗎,擴大的越大,緩存的數據越多,系統不就越快了嗎?緩存通常都是靜態RAM,速度是非常的快, 但是靜態RAM集成度低(存儲相同的數據,靜態RAM的體積是動態RAM的6倍), 價格高(同容量的靜態RAM是動態RAM的四倍), 由此可見,擴大靜態RAM作為緩存是一個非常愚蠢的行為, 但是為了提高系統的性能和速度,我們必須要擴大緩存, 這樣就有了一個折中的方法,不擴大原來的靜態RAM緩存,而是增加一些高速動態RAM做為緩存, 這些高速動態RAM速度要比常規動態RAM快,但比原來的靜態RAM緩存慢, 我們把原來的靜態ram緩存叫一級緩存,而把後來增加的動態RAM叫二級緩存。
一級緩存和二級緩存中的內容都是內存中訪問頻率高的數據的復製品(映射),它們的存在都是為了減少高速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、4MB等。一級緩存容量各產品之間相差不大,而二級緩存容量則是提高CPU性能的關鍵。二級緩存容量的提升是由CPU製造工藝所決定的,容量增大必然導致CPU內部晶體管數的增加,要在有限的CPU面積上集成更大的緩存,對製造工藝的要求也就越高。
現在主流的CPU二級緩存都在2MB左右,其中英特爾公司07年相繼推出了台式機用的4MB、6MB二級緩存的高性能CPU,不過價格也是相對比較高的,對於對配置要求不是太高的朋友,一般的2MB二級緩存的雙核CPU基本也可以滿足日常上網需要了。
Ⅵ JAVA幾種緩存技術介紹說明
1、TreeCache / JBossCache
JBossCache是一個復制的事務處理緩存,它允許你緩存企業級應用數據來更好的改善性能。緩存數據被自動復制,讓你輕松進行JBoss伺服器之間 的集群工作。JBossCache能夠通過JBoss應用服務或其他J2EE容器來運行一個MBean服務,當然,它也能獨立運行。
2、WhirlyCache
Whirlycache是一個快速的、可配置的、存在於內存中的對象的緩存。它能夠通過緩存對象來加快網站或應用程序的速度,否則就必須通過查詢資料庫或其他代價較高的處理程序來建立。
3、SwarmCache
SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個區域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。
4、JCache
JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。
5、ShiftOne
ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。
Ⅶ 緩存數據包括哪些
手機里的緩存數據指的是什麼?
就是你上網瀏覽時產生的臨時文件。
手機緩存數據是什麼意思
緩存是指臨時文件交換區,手機把最常用的文件從存儲器里提出來臨時放在緩存里,就像把工具和材料搬上工作台一樣,這樣會比用時現去倉庫取更方便。因為緩存往往使用的是RAM(斷電即掉的非永久儲存),所以在忙完後還是會把文件送到手機存儲器里,
什麼是緩存數據?(手機上的)
緩存(Cache memory)是硬碟控制器上的一塊內存晶元,具有極快的存取速度,它是硬碟內部存儲和外界介面之間的緩沖器。由於硬碟的內部數據傳輸速度和外界介面傳輸速度不同,緩存在其中起到一個緩沖的作用。緩存的大小與速度是直接關繫到硬碟的傳輸速度的重要因素,能夠大幅度地提高硬碟整體性能。當硬碟存取零碎數據時需要不斷地在硬碟與內存之間交換數據,有大緩存,則可以將那些零碎數據暫存在緩存中,減小外系統的負荷,也提高了數據的傳輸速度為了提高訪問網頁的速度,瀏覽器會採用累積式加速的方法,將曾經訪問的網頁內容(包括圖片以及cookie文件等)存放在電腦里。這個存放空間,就稱它為IE緩存。以後每次訪問網站時,瀏覽器會首先搜索這個目錄,其中已經有訪問過的內容,那I就不必從網上下載,而直接從緩存中調出來,從而提高了纖簡訪問網站的速度
QQ緩存文件包括哪些內容?
緩存就是數據交換的緩沖區(稱作Cache),當某一硬體要讀取數據時,會首先從緩存中查找需要的數據,如果找到了則直接執行,找不到的話則從內存中找。由於緩存的運行速度比內存快得多,故緩存的作用就是幫助硬體更快地運行。
因為緩存往往使用的是RAM(斷電即掉的非永久儲存),所以在用完後還是會把文件送到硬碟等存儲器里永久存儲。電腦里最大的緩存就是內存條了,最快的是CPU上鑲的L1和L2緩存,顯卡的顯存是給顯卡運算毀御褲晶元用的緩存,硬碟上也有16M或者32M的緩存。
如何清理
打開qq,點擊下方導航菜單中的設置圖標,進入系統設置裡面,進入基本設置——》文件管理,接下來,會進行緩存文件的掃描,需要等待幾分鍾,如果你很久沒有清理過的話。掃描完成後,點擊全部刪除。同時,你也可以勾選上自動清理的qq產生的緩存文件的勾選項,以後就會自動清理了。點擊全部刪除後,耐心待定刪除,一會就刪除成功了,
手機里的緩存文件是什麼?
那隻是一些臨時信息而已,刪除無影響的,那些設置信息還在的【如果要重置該軟體,要在手機里清除數據就好
緩存有什麼作用,應用程序緩存分為哪4種
硬碟的緩存主要起三種作用:
1、預讀取
當硬碟受到CPU指令控制開始讀取數據時,硬碟上的控制晶元會控制磁頭把正在讀取的簇的下一個或者幾個簇中的數據讀到緩存中(由於硬碟上數據存儲時是比較連續的,所以讀取命中率較高),當需要讀取下一個或者幾個簇中的數據的時候,硬碟則不需要再次讀取數據,直接把緩存中的數據傳輸到內存中就可以了,由於緩存的速度遠遠高於磁頭讀寫的速度,所以能夠達到明顯改善性能的目的。
對寫入動作進行緩存
2、是對寫入動作進行緩存。當硬碟接到寫入數據的指令之後,並不會馬上將數據寫入到碟片上,而是先暫時存儲在緩存里,然後發送一個「數據已寫入」拆悉的信號給系統,這時系統就會認為數據已經寫入,並繼續執行下面的工作,而硬碟則在空閑(不進行讀取或寫入的時候)時再將緩存中的數據寫入到碟片上。雖然對於寫入數據的性能有一定提升,但也不可避免地帶來了安全隱患——如果數據還在緩存里的時候突然掉電,那麼這些數據就會丟失。對於這個問題,硬碟廠商們自然也有解決辦法:掉電時,磁頭會藉助慣性將緩存中的數據寫入零磁軌以外的暫存區域,等到下次啟動時再將這些數據寫入目的地。
臨時存儲最近訪問過的數據
3、是臨時存儲最近訪問過的數據。有時候,某些數據是會經常需要訪問的,硬碟內部的緩存會將讀取比較頻繁的一些數據存儲在緩存中,再次讀取時就可以直接從緩存中直接傳輸。緩存就像是一台計算機的內存一樣,在硬碟讀寫數據時,負責數據的存儲、寄放等功能。這樣一來,不僅可以大大減少數據讀寫的時間以提高硬碟的使用效率。同時利用緩存還可以讓硬碟減少頻繁的讀寫,讓硬碟更加安靜,更加省電梗更大的硬碟緩存,你將讀取游戲時更快,拷貝文件時候更快,在系統啟動中更為領先。
QQ設置里的,清空緩存數據是什麼意思?
您好
清空緩存是清空你收到的圖片或者臨時文件。(比如別人發的表情)
希望可以幫到你
清空所有聊天記錄和清空緩存數據有什麼區別
兩者不同概念,,一個是聊天工具,,一個是電腦瀏覽器,,
緩存和內存有什麼區別
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演算法),它是將最近一段時間內最少被訪問過......>>
手機軟體清除緩存和清除數據有什麼不一樣?
帳號密碼還裡面下載的表情聊天背景等,沒清除什麼重要東西。放心清楚吧