Ehcache has three storage tiers, summarized here: Memory store – Heap memory that holds a copy of the subset of data from the off-heap store. Subject to Java GC. Off-heap store – Limited in size only by available RAM. Not subject to Java GC. Can store serialized data only. Provides overflow capacity to the memory store. Disk store – Backs up in-memory data and provides overflow capacity to the other tiers. Can store serialized data only
磁盤緩存加載時會把之前磁盤數(shù)據(jù)加載到OffHeapDiskStore中的map,讀取的時候先讀OnHeapStore中的map,讀不到在讀OffHeapDiskStore中的map
Ehcache支持的數(shù)據(jù)存儲包括:
堆內(nèi)存儲 - 利用Java的堆內(nèi)存來存儲緩存條目。使用與Java應(yīng)用程序相同的由JVM垃圾收集器管理的堆內(nèi)存。JVM使用的堆空間越多,應(yīng)用程序性能受到的垃圾收集暫停影響越大。此存儲最快但空間最小。
堆外存儲 - 只有可用RAM限制大小。不受Java垃圾收集(GC)的影響。它的速度非??欤榷褍?nèi)存儲要慢,因為數(shù)據(jù)的存儲和重新訪問的都要經(jīng)過堆內(nèi)存儲層。
磁盤存儲 - 利用磁盤(文件系統(tǒng))來存儲緩存條目。這種類型的存儲資源通常非常豐富,但是比基于ram的存儲要慢得多。對于使用磁盤存儲的所有應(yīng)用程序,建議使用一個快速且專用的磁盤來優(yōu)化吞吐量。
集群存儲 - 這個數(shù)據(jù)存儲是遠程服務(wù)器上的一個緩存。遠程服務(wù)器可以有選擇地提供一個故障轉(zhuǎn)移服務(wù)器使可用性更高。集群存儲由于網(wǎng)絡(luò)延遲和建立客戶機/服務(wù)器一致性等因素而受到性能的懲罰,因此這一層的性能比本地的堆外存儲要慢
當將一個值放入緩存時,它會直接轉(zhuǎn)到權(quán)威層,這是最底層。
get將在緩存層中向上推送值,并在上層緩存。
一旦將值放入到權(quán)威層中,所有更近的緩存層都將失效。
緩存丟失(值不在任何層上)總是會一直向下獲取直到權(quán)威層