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
磁盘缓存加载时会把之前磁盘数据加载到OffHeapDiskStore中的map,读取的时候先读OnHeapStore中的map,读不到在读OffHeapDiskStore中的map
Ehcache支持的数据存储包括:
堆内存储 - 利用Java的堆内存来存储缓存条目。使用与Java应用程序相同的由JVM垃圾收集器管理的堆内存。JVM使用的堆空间越多,应用程序性能受到的垃圾收集暂停影响越大。此存储最快但空间最小。
堆外存储 - 只有可用RAM限制大小。不受Java垃圾收集(GC)的影响。它的速度非常快,但比堆内存储要慢,因为数据的存储和重新访问的都要经过堆内存储层。
磁盘存储 - 利用磁盘(文件系统)来存储缓存条目。这种类型的存储资源通常非常丰富,但是比基于ram的存储要慢得多。对于使用磁盘存储的所有应用程序,建议使用一个快速且专用的磁盘来优化吞吐量。
集群存储 - 这个数据存储是远程服务器上的一个缓存。远程服务器可以有选择地提供一个故障转移服务器使可用性更高。集群存储由于网络延迟和建立客户机/服务器一致性等因素而受到性能的惩罚,因此这一层的性能比本地的堆外存储要慢
当将一个值放入缓存时,它会直接转到权威层,这是最底层。
get将在缓存层中向上推送值,并在上层缓存。
一旦将值放入到权威层中,所有更近的缓存层都将失效。
缓存丢失(值不在任何层上)总是会一直向下获取直到权威层
网友评论