本文目錄一覽:
JAVA幾種緩存技術介紹說明
1、OSCache
OSCache是個一個廣泛採用的高性能的J2EE緩存框架,OSCache能用於任何java應用程序的普通的緩存解決方案。
OSCache有以下特點:
(1)緩存任何對象,你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
永久緩存–緩存能隨意的寫入硬盤,因此答應昂貴的創建(eXPensive-to-create)數據來保持緩存,甚至能讓應用重啟。
(2)支持集群–集群緩存數據能被單個的進行參數配置,不需要修改代碼。
緩存記錄的過期–你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略(假如默認性能不需要時)。
2、Java Caching System
JSC(Java Caching System)是一個用分布式的緩存系統,是基於服務器的java應用程序。它是通過提供治理各種動態緩存數據來加速動態web應用。
JCS和其他緩存系統一樣,也是一個用於高速讀取,低速寫入的應用程序。
動態內容和報表系統能夠獲得更好的性能。
假如一個網站,有重複的網站結構,使用間歇性更新方式的數據庫(而不是連續不斷的更新數據庫),被重複搜索出相同結果的,就能夠通過執行緩存方式改進其性能和伸縮性。
3、EHCache
EHCache 是一個純java的在進程中的緩存,它具有以下特性:快速,簡單,為Hibernate2.1充當可插入的緩存,最小的依靠性,全面的文檔和測試。
4、JCache
JCache是個開源程序,正在努力成為JSR-107開源規範,JSR-107規範已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。
5、ShiftOne
ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。
6、SwarmCache
SwarmCache是一個簡單且有效的分布式緩存,它使用ip multicast與同一個局域網的其他主機進
行通訊,是非凡為集群和數據驅動web應用程序而設計的。
SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。
SwarmCache使用JavaGroups來治理從屬關係和分布式緩存的通訊。
擴展資料
Java中緩存存在的原因:
一 般情況下,一個網站,或者一個應用,它的一般形式是,瀏覽器請求應用服務器,應用服務器做一堆計算後再請求數據庫,數據庫收到請求後再作一堆計算後把數據 返回給應用服務器。
應用服務器再作一堆計算後把數據返回給瀏覽器,這個是一個標準流程。但是隨着互連網的普及,上網的人越來越多,網上的信息量也越來越多。
數據庫每秒中接受請求的次數也是有限的,如果利用有限的資源來提供儘可能大的吞吐量呢。一個辦法:減少計算量,縮短請求流程(減少網絡io或者硬盤io),這時候緩存就可以大展手腳了。
緩存的基本原理就是打破上圖中所描繪的標準流程,在這個標準流程中,任何 一個環節都可以被切斷.請求可以從緩存里取到數據直接返回。
java為什麼使用緩存實現搶答
您是否在詢問為什麼使用緩存,緩存是用來存儲數據的。
FIFO先入先出,很好理解,就和隊列一樣,先進隊列的先出隊列,LRU 最近最少使用,意思就是最近讀取的數據放在最前面,最早讀取的數據放在最後面,如果這個時候有新的數據進來,那麼最後面存儲的數據淘汰,LFU最不常使用,意思就是對存儲的數據都會有一個計數引用,然後隊列按數據引用次數排序,引用數多的排在最前面,引用數少的排在後面。如果這個時候有新的數據進來,把最後面的數據刪除,把新進數據排在最後面,且引用次數為1。
java清緩存前可以進後台方法,清完緩存不進了
關於java清緩存前可以進後台方法,清完緩存不進了相關資料如下
java我們在使用緩存時,往往先嘗試去緩存中取值,如果沒有,再去數據庫取值,如果數據庫也沒有值,則根據業務需求,返回空或者拋異常。
如果用戶一直訪問一個數據庫不存在的數據,比如id為-1的數據,就會導致每次請求都會先去緩存查一次,然後再去數據庫查一次,造成嚴重的性能問題。這種情況就叫緩存穿透。
解決方案
以下幾種解決方案:對請求參數做校驗,比如用戶鑒權校驗,id做基礎校驗,id = 0的直接攔截。
如果查詢到數據庫沒有值,也將對應的key存進緩存中,value為null。這樣下次查詢就直接從緩存返回了。但這裡的key的緩存時間應該比較短,比如30s。防止後面在數據庫插入了這條數據,而用戶獲取不到。
使用布隆過濾器,判斷一個key是否已經查過了,如果已經查過了,就不去數據庫查詢。
緩存擊穿
緩存擊穿指的是,一個key的訪問量非常大,比如某秒殺活動,有1w/s的並發量。這個key在某一時刻過期,那這些大量的請求就會一瞬間到數據庫,數據庫可能會直接崩潰。
解決方案
緩存擊穿的解決方案也有幾種,可以配合使用:對於熱點數據,慎重考慮過期時間,確保熱點期間key不會過期,甚至有些可以設置永不過期。
使用互斥鎖(比如Java的多線程鎖機制),第一個線程訪問key的時候就鎖住,等查詢數據庫返回後,把值插入到緩存後再釋放鎖,這樣後面的請求就可以直接取緩存裡面的數據了。
緩存雪崩
緩存雪崩指的是,在某一時刻,多個key失效。這樣就會有大量的請求從緩存中獲取不到值,全部到數據庫。還有另一種情況,就是緩存服務器宕機,也算做緩存雪崩。
解決方案
針對上述兩種情況,緩存雪崩有兩種解決方案:對每個key的過期時間設置一個隨機值,而不是所有key都相同。
使用高可用的分布式緩存集群,確保緩存的高可用性,比如redis-cluster。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/284614.html