您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Spring框架中如何理解Cache抽象,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
從3.1版開始,Spring Framework提供了對現有Spring應用程序透明地添加緩存的支持。 與事務支持類似,緩存抽象允許一致地使用各種緩存解決方案,而對代碼的影響最小。
從Spring 4.1開始,通過JSR-107注釋和更多自定義選項的支持,緩存抽象得到了顯著改進。
從術語上看,"buffer"和"cache",可以互相被替換.但是,他們確實代表著不同的事情.
傳統上,一個buffer被用來作為快數據和慢數據之間的臨時存儲.因為快速的一方需要等待慢的一方(會影響性能),buffer通過允許整塊數據一次移動而不是一小塊數據一點一點移動來緩解壓力. 這個數據只會從buffer中被寫入或者讀出一次.此外,buffers對總對一方可以見.
Cache,則相反,通過定義,隱藏,并且不會讓對方意識到它的存在.它同樣提高性能,但是這是讓相同數據在同時以快速的方式被多次讀取來實現的.
緩存抽象的核心是將緩存應用于Java方法,從而減少了基于緩存中可用信息的執行次數。也就是說,每次調用目標方法時,抽象都會應用緩存行為檢查方法是否已經為給定的參數執行。如果有,則返回緩存的結果,而不必執行實際的方法;如果沒有,則執行方法,緩存結果并返回給用戶,以便在下次調用方法時返回緩存的結果。這樣,對于給定的一組參數,昂貴的方法(CPU或IO綁定)只能執行一次,并且結果可以重用,而不必實際再次執行該方法。緩存邏輯被透明地應用,沒有任何對調用程序的干擾。
緩存抽象提供了其他緩存相關的操作,比如更新緩存的內容或者刪除一個或者全部.如果緩存在處理數據的過程中經常改變,這些操作將非常有用.
就像Spring Framework中的其他服務一樣,緩存服務是一種抽象(不是緩存實現),需要使用實際存儲來存儲緩存數據 - 也就是說,抽象使開發人員不必編寫緩存相關邏輯,但它也不提供實際的數據存儲能力。
通過接口 org.springframework.cache.Cache(緩存)
和org.springframework.cache.CacheManager(緩存管理器) 實現緩存的抽象
這個抽象的一些實現可以直接使用:基于JDK java.util.concurrent.ConcurrentMap的緩存(即默認的緩存是基于JVM的ConcurrentMap),Ehcache 2.x,Gemfire緩存,Caffeine,符合和JSR-107的緩存(例如Ehcache 3.x)。 有關插入其他緩存存儲/提供程序的更多信息,請參閱插入不同的后端緩存。
注意的是:
Spring的緩存抽象沒有特別處理多線程或者多進程,這些都是緩存的實現來處理的。
如果你有多進程環境(一個應用部署在多個節點上),你需要配置相應地提供你緩存的程序.根據你的用例,從多個節點上拷貝相通數據就足夠了.然而,如果在應用的過程中修改了數據,則需要有其他的機制來通知修改.
緩存一個專門的對象是一個與典型的get-if-not-found-then- proceed-and-put-eventually代碼塊等價,是通過編程緩存交互找到.沒有鎖被使用,多個線程并發的獲取相同的數據.刪除(eviction)也同樣如此.如果多個線程嘗試并發的更新或者刪除數據,你也許就使用了過時(stale)的數據.一些緩存提供方提供了更加高級的特性.從文檔中可以看到更多的細節.
使用緩存你需要從兩方面看起:
聲明緩存:確認需要被緩存的方法還有他們使用的策略
配置緩存: 存儲數據然后把數據讀到緩存中.
以上就是Spring框架中如何理解Cache抽象,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。