`

java缓存——ehcache简单小结

 
阅读更多

最近项目用到了java缓存——ehcahe缓存

 

ehcache介绍:

 

ehcache:java缓存框架、轻巧,是hibernate内置的缓存,其他特性自行百度之。

        

ehcache配置

name =""                              缓存cache的名字

maxElementsInMemory=""  内存中保存对象最大个数 

timeToLiveSeconds=""        对象存活时间,单位秒
timeToIdleSeconds=""         允许闲置时间 ,单位秒
eternal="false"                     是否永久存活,设置为true,timeToLiveSeconds将失去作用
overflowToDisk="false"        是否输出到磁盘 
memoryStoreEvictionPolicy="LFU"    失效策略,有FIFO(先进先出),LFU(最近最少使用),LFU(较少使用)

CacheManager

 

cacheManager的实例化有多重形式

 

//单例方式
CacheManager.create(); 
 //记载默认路径下的ehcache.xml
  CacheManager manager = new CacheManager(); 
//加载指定路径的xml
 CacheManager manager = new CacheManager("src/config/ehcache.xml");  
// 以编程的方式添加和删除cache   
         CacheManager manager = CacheManager.create();
          manager.addCache();  

 

 

Cache

 方法:

//获取对该key对象的读操作锁
cache.acquireReadLockOnKey(key);
//获取该key对象的写操作锁,此时可读,但不可写
cache.acquireWriteLockOnKey(key);
//释放两种锁(一般放在finally块)
cache.releaseReadLockOnKey();
cache.releaseWriteLockOnKey(key);
//强制写入磁盘,包括在内存中的element
cache.flush();
//获取cache中key的element对象
cache.get(key);
//该key对象是在内存中还是在磁盘中
cache.isElementInMemory(key);
cache.isElementOnDisk(key);

ehcache.xml的配置就是配置cache属性的。 

 

 

Element

element就是cache缓存的一个个对象,element有个key还有value。有两个最主要的方法

element.getObjectKey();//key值
element.getObjectValue();//value值,这两个都必须是Serializable

 当然element也有一系列描述他的属性如被击中数,存活时间,可限制时间,创建时间等等。

 

 

实例

 

CacheManager manager = new CacheManager("./resource/ehache.xml");
		Cache cache = manager.getCache("product");
		for (int i = 0; i < 6; i++) {
			Element e = new Element("key" + i, "value" + i);
			cache.put(e);
		}

		List<String> keys = cache.getKeys();
		for (String key : keys) {
			System.out.println(key + "," + cache.get(key));
		}

 

 

 

注意点:

1、存储的类必须实现Serializable接口,包括该类的属性也需要实现该接口

2、当还没达到内存最大数量时,每添加一个对象,则加在前一个添加的对象前面,内存中的对象采取的就是LRU算法。当超过之后,后面的对象直接写到磁盘。

 

疑问点:

假设一个Apple   a 对象被缓存到磁盘上了,之后又继续向该缓存添加很多的对象之后,当从缓存磁盘中取得a对象的时候,发现他与之前的a对象不是同一个。怀疑是当缓存到某一个程度(肯定超过内存最大个数)的时候,ehcache从磁盘中取得的时候会自动新建一个实例。

 

 

 

  • 大小: 5.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics