轉載自http://blog.java1234.com/blog/articles/277.html
Ehcache默認配置的話 為了提高效率,所以有一部分緩存是在內存中,然后達到配置的內存對象總量,則才根據策略持久化到硬盤中,這里是有一個問題的,假如系統突然中斷運行 那內存中的那些緩存,直接被釋放掉了,不能持久化到硬盤;這種數據丟失,對於一般項目是不會有影響的,但是對於我們的爬蟲系統,我們是用來判斷重復Url的,所以數據不能丟失;
這時候我們就需要通過Ehcache配置,來實現緩存的持久化,不存內存中。
這里給下參考配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
ehcache
>
<!--
磁盤存儲:將緩存中暫時不使用的對象,轉移到硬盤,類似於Windows系統的虛擬內存
path:指定在硬盤上存儲對象的路徑
-->
<
diskStore
path
=
"C:\ehcache"
/>
<!--
defaultCache:默認的緩存配置信息,如果不加特殊說明,則所有對象按照此配置項處理
maxElementsInMemory:設置了緩存的上限,最多存儲多少個記錄對象
eternal:代表對象是否永不過期
overflowToDisk:當內存中Element數量達到maxElementsInMemory時,Ehcache將會Element寫到磁盤中
-->
<
defaultCache
maxElementsInMemory
=
"100"
eternal
=
"true"
overflowToDisk
=
"true"
/>
<!--
maxElementsInMemory設置成1,overflowToDisk設置成true,只要有一個緩存元素,就直接存到硬盤上去
eternal設置成true,代表對象永久有效
maxElementsOnDisk設置成0 表示硬盤中最大緩存對象數無限大
diskPersistent設置成true表示緩存虛擬機重啟期數據
-->
<
cache
name
=
"a"
maxElementsInMemory
=
"1"
eternal
=
"true"
overflowToDisk
=
"true"
maxElementsOnDisk
=
"0"
diskPersistent
=
"true"
/>
</
ehcache
>
|
運行前面的測試代碼,只要我們添加緩存元素 ,則直接寫入到硬盤中;