Cache cache = manager.getCache("sampleCache");
cache.disableDynamicFeatures();
timeToLive:一个 element 在缓存中存在
的最长时间(秒),不论它是否被访问过都会被清除。
timeToIdle:一个 element 未被访问
的最长时间(秒),经过这段时间后被清除。
maxEntriesLocalHeap
maxBytesLocalHeap
maxEntriesLocalDisk
maxBytesLocalDisk
Cache cache = manager.getCache("sampleCache");
CacheConfiguration config = cache.getCacheConfiguration();
config.setTimeToIdleSeconds(60);
config.setTimeToLiveSeconds(120);
config.setmaxEntriesLocalHeap(10000);
config.setmaxEntriesLocalDisk(1000000);
三、传递拷贝而非引用
默认情况下 get()
方法会取得缓存中数据的引用,之后对这个数据的所有改变都会立刻反映到缓存中。有些时候用户想要获得一个缓存数据的拷贝
,对这个拷贝的操作不会影响到缓存。
XML 配置: 把 copyOnRead
和 copyOnWrite
设置为 true
<cache name="copyCache"
maxEntriesLocalHeap="10"
eternal="false"
timeToIdleSeconds="5"
timeToLiveSeconds="10"
copyOnRead="true"
copyOnWrite="true">
<copyStrategy class="com.company.ehcache.MyCopyStrategy"/>
</cache>
Java 代码中:
CacheConfiguration config = new CacheConfiguration("copyCache", 1000).copyOnRead(true).copyOnWrite(true);
Cache copyCache = new Cache(config);
实现接口 net.sf.ehcache.store.compound.CopyStrategy
。
XML 中配置 <copyStrategy class="com.company.ehcache.MyCopyStrategy"/>
。
Java 代码中:
CacheConfiguration cacheConfiguration = new CacheConfiguration("copyCache", 10);
CopyStrategyConfiguration copyStrategyConfiguration = new CopyStrategyConfiguration();
copyStrategyConfiguration.setClass("com.company.ehcache.MyCopyStrategy");
cacheConfiguration.addCopyStrategy(copyStrategyConfiguration);
接受所有数据,无论有没有实现 Serializable
。
线程安全
。
如果数据量超过了存储最大值:(1)配置了溢出策略,数据可以被保存到其他层级;(2)没有配置,一部分数据被删除。
内存回收策略:
LRU(最近最少使用):默认策略。缓存的时间戳离当前时间最远
的将被回收。
LFU(最少被使用):缓存有一个 hit 值,值最小
的被回收。
FIFO(先进先出)
仅能存储实现了 Serializable
接口的数据。其他数据会抛出 NotSerializableException
异常。
磁盘存储是可选的,不一定要配置;如果有多个 CacheManager,也没有必要配置多个磁盘存储路径。
磁盘存储选项:
localTempSwap:允许缓存存放到磁盘,但重启之后这些数据就会丢失。
localRestartable:重启之后数据不会丢失,会自动加载到内存中。