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

ehcache自定義緩存

發布時間: 2022-12-06 08:31:32

A. Ehcache緩存怎麼讀取

ehcache初始化單個cache的時候會創建diskstore,diskstore的目錄位置可以自己去設置,在Cache構造函數中可以指定;這樣Cache的initialise方法會自動讀取diskstore目錄下對應的緩存的data和index文件然後載入到系統中,通過cache的get方法就能讀取到disk中的數據。
建議去看下ehcache的源代碼,源代碼還是比較清晰的。

B. ehcache緩存配置問題

分析你的問題的話,還是要一步步如題啊。 你的問題主要還是緩存設進去了 addObject(nodeName, obj); 但是 這部門沒有看到實現 而 this.cacheManager = CacheManager.create(); cache = cacheManager.getCache(cacheName); 沒有看到任何東西。 那麼要是你addObject就跟蹤一下看是否已經緩存成功了呢? 如果是在這部分成功的話,看你的程序 感覺是不是CacheManager 被重復創建了呢?用的不是一個實例?

C. 如何在JPA,Hibernate 和 Spring 中配置 Ehcache 緩存

緩存配置

首先在 persistence.xml 配置文件中添加下面內容:

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.generate_statistics" value="true"/>

EHCache 還需要一些獨立的配置,你需要在類路徑中放置 ehcache.xml ,文件內容如下:

<cache name="samples.Employee"
maxElementsInMemory="2000"
eternal="false"
timeToIdleSeconds="1800"
timeToLiveSeconds="3600"
overflowToDisk="false"/>

D. 常用的緩存技術

第一章 常用的緩存技術
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兩種緩存。

E. Spring如何配置資料庫查詢緩存/對象緩存EHCache

  1. 在ehcache.xml文件中配置查詢緩存參數,ehcache.xml文件配置如下:

<ehcache>

<!--diskStore元素,配置一個目錄,這個目錄用來存放數據,
也就是說,如果EhCache需要把數據寫入磁碟,將會寫到這個目錄下-->
<diskStorepath="java.io.tmpdir"/>

<defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskPersistent="false"
="120"/>

<cachename="ehcacheName"
maxElementsInMemory="3000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="36000"
overflowToDisk="true"
/>
</ehcache>

2. spring的配置

第一步:給指定方法配置緩存/src/main/resources/applicationContext-resources.xml

<ehcache:proxyid="userGroupServiceProxy"refId="userGroupService">
<ehcache:cachingcacheName="cash15Min"methodName=""/>
<ehcache:cachingcacheName="cash15Min"methodName=""/>
<ehcache:cachingcacheName="cash15Min"methodName="selectuserGroupById"/>
</ehcache:proxy>

配置參數的含義如下:
id:唯一標識符
refId:需要配置緩存的service或者controller
cacheName:緩存名稱
methodName:需要緩存的方法,這個方法必須是shoppingHomeService中的方法
第二步:在控制器中注入依賴的緩存userGroupServiceProxy /src/main/webapp/WEB-INF/dispatcher-servlet.xml

<beanid="PFController"class="com.java.mall.controller.PFController">
<propertyname="userService"ref="userService"></property>
<propertyname="userGroupService"ref="userGroupServiceProxy"></property>
</bean>

同時需要在實體類中注入依賴,提供setter方法,

;
publicvoidsetuserGroupService(){
this.userGroupService=userGroupService;

F. ehcache 指定使用哪個緩存

ehcache主要是對資料庫訪問的緩存,相同的查詢語句只需查詢一次資料庫,從而提高了查詢的速度
oscache 主要是對頁面的緩存,可以整頁或者指定網頁某一部分緩存,同時指定他的過期時間,這樣在此時間段裡面訪問的數據都是一樣的

hibernate2以前提倡用ehcache
hibernate3後提倡oscache,

G. ehcache 緩存如何添加配置文件

在ehcache.xml文件中配置查詢緩存參數,ehcache.xml文件配置如下: 2. spring的配置 第一步:給指定方法配置緩存/src/main/resources/applicationContext-resources.xml 配置參數的含義如下:id:唯一標識符refId

H. ehcache java 對象緩存怎麼實現

Java EE和應用緩存
為普通緩存場景和模式提供高質量的實現。
阻塞緩存:它的機制避免了復制進程並發操作的問題。
SelfPopulatingCache在緩存一些開銷昂貴操作時顯得特別有用,它是一種針對讀優化的緩存。它不需要調用者知道緩存元素怎樣被返回,也支持在不阻塞讀的情況下刷新緩存條目。
CachingFilter:一個抽象、可擴展的cache filter。
SimplePageCachingFilter:用於緩存基於request URI和Query String的頁面。它可以根據HTTP request header的值來選擇採用或者不採用gzip壓縮方式將頁面發到瀏覽器端。你可以用它來緩存整個Servlet頁面,無論你採用的是JSP、velocity,或者其他的頁面渲染技術。
:緩存頁面片段,基於request URI和Query String。在JSP中使用jsp:include標簽包含。
已經使用Orion和Tomcat測試過,兼容Servlet 2.3、Servlet 2.4規范。
Cacheable命令:這是一種老的命令行模式,支持非同步行為、容錯。
兼容Hibernate,兼容Google App Engine。
基於JTA的事務支持,支持事務資源管理,二階段提交和回滾,以及本地事務。

I. ehcache java 對象緩存怎麼實現

EhCache裡面有一個CacheManager類型,它負責管理cache。Cache裡面存儲著Element對象,Element必須是key-value對。Cache是實際物理實現的,在內存中或者磁碟。這些組件的邏輯表示就是下面即將要討論的類。他們的方法提供了可編程的訪問方式。

CacheManager
負責Cache的創建、訪問、移除。

CacheManager創建
CacheManager支持兩種創建模式:單例(Singleton mode)和實例(InstanceMode)。
在2.5之前的版本中,在同一個JVM中允許存在任意數量相同名字的CacheManager。每調用new CacheManager(...)一次,就會產生一個新的CacheManager實例,而不管已經存在多少個。調用CacheManager.create(...),則返回的是已經存在的那個配置對應的單例CacheManager,如果不存在,則創建一個。

2.5之後的版本,不允許在同一個JVM內存在多個具有相同名字的CacheManager。創建非單例實例的CacheManager()構造函數可能會打破這一規則,但是會拋出NPE異常。如果你的代碼要在同一個JVM創建多個同名的實例,請使用靜態方法CacheManager.create(),總是返回對應名的CacheManager(如果已經存在),否則創建一個

J. SpringBoot緩存(Ehcache)

(3)如果我們想要自定 Ehcache 配置文件的名稱和位置,可以在 application.properties 中添加如下配置:

執行結果下如下:

可以看到第一次從DB查詢了數據,第二次則從緩存讀取,當更新DB數據時同時也更新了緩存數據,再次取數據仍然走緩存。

對於高頻數據,一般希望長時間緩存,對於臨時數據,如驗證碼,token等,一般需要一個指定的時間,到期則取消。
可以通過一個類去控制緩存的有效時間,一般指定 timeToIdleSeconds=0 表示數據一直有效, timeToLiveSeconds=X秒 指定過期時間,如下:

然後在controller靈活的調用

對於無狀態的系統,可以方便的緩存token,驗證碼等短時有效的數據,方便存取。