MemoryStore、Off-Heap Store、DiskStore

MemoryStore

始终处于启用状态,所有元素都可以放在MemoryStore层

  • 线程安全
  • 就是使用内存存储(ConcurrentHashMap),很快
    所有的cache都指明了最大占用内存,超过了
  • 如果不允许溢出内存,存在的元素被删除
  • 允许溢出,检查执行,删除过期元素,没过期的移到下一层。过期策略有LRU(最近最少使用)、LFU(最近使用频率最少)、FIFO(先进先出)
    getQuiet、putQuiet 操作元素时不会更新最近使用时间和使用次数,使用次数的统计使用AtomicLongFieldUpdater的cas操作更新

Off-Heap Store

也称之为BigMemory,不受GC影响,可以存放超大的cache,off-heap的数据是以字节存储的,所以元素key和value都必须序列化,get和put操作时都伴随着序列化和反序列化的过程。MemoryStore保存了来自Off-Heap Store使用最频繁的数据。

DiskStore

可以当做额外的空间,系统重启可以持久化缓存数据到磁盘
必须是序列化的元素才能放到DiskStore,DiskStore也是线程安全的
DiskStore的俩种策略

  • localTempSwap 在操作期间允许cache溢出到磁盘,但是系统重启后会清除这类cache,可以使用maxEntriesLocalDisk or maxBytesLocalDisk来控制可以存放在磁盘的cache大小
  • localRestartable 这个策略实现了一个restartable store,它保存了内存中所有的cache,重启后,数据还是会被加载进入restartable store。

Expiry and Eviction

ehcache默认一个线程用来移除过期元素,diskExpiryThreadIntervalSeconds属性设置过期线程跑的间隔时间,默认120s。

MemoryStore比DiskStore快一个数量级,因为DiskStore需要序列化数据、删除过期数据、读取数据。写数据是由一个单独的线程异步写到磁盘。
建议:尽可能使用MemoryStore,当MemoryStore存不下时使用Off-Heap Store,这不会引起GC。

你可能感兴趣的:(MemoryStore、Off-Heap Store、DiskStore)