ehcache是一种高度可配置的工具,并且示例通常涉及多层接口,相对较为复杂。
是否有人遇到过最简单的示例,仅在内存中缓存像单个数字这样的东西(不分散,没有XML,只需尽可能少的Java代码行数)。然后将该数字缓存60秒,然后下一个读取请求会导致它获取新值(例如通过调用Random.nextInt()或类似方法)。
对于这样的问题,编写自己的缓存器(使用单例和少量同步)是否更快/更容易?
请勿使用Spring。
ehcache是一种高度可配置的工具,并且示例通常涉及多层接口,相对较为复杂。
是否有人遇到过最简单的示例,仅在内存中缓存像单个数字这样的东西(不分散,没有XML,只需尽可能少的Java代码行数)。然后将该数字缓存60秒,然后下一个读取请求会导致它获取新值(例如通过调用Random.nextInt()或类似方法)。
对于这样的问题,编写自己的缓存器(使用单例和少量同步)是否更快/更容易?
请勿使用Spring。
EhCache带有一个故障转移配置,其中包含一些合理的过期时间(120秒)。这已足以使其运行起来。
导入:
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
接下来,创建缓存非常简单:
CacheManager.getInstance().addCache("test");
这将创建一个名为test
的缓存。您可以拥有许多不同的、独立的缓存,所有这些缓存都由相同的CacheManager
进行管理。向此缓存添加(key, value)
键值对就像这样简单:
CacheManager.getInstance().getCache("test").put(new Element(key, value));
通过给定的键检索值就像这样简单:
Element elt = CacheManager.getInstance().getCache("test").get(key);
return (elt == null ? null : elt.getObjectValue());
如果在默认的120秒过期时间后尝试访问一个元素,缓存将返回null(因此需要检查elt
是否为null)。您可以通过创建自己的ehcache.xml
文件来调整过期时间 - 该文件的文档在ehcache网站上描述得很好。jbrookover的答案的有效实现:
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import net.sf.ehcache.Cache;
public class EHCacheDemo {
public static final void main(String[] igno_red) {
CacheManager cchm = CacheManager.getInstance();
//Create a cache
cchm.addCache("test");
//Add key-value pairs
Cache cch = cchm.getCache("test");
cch.put(new Element("tarzan", "Jane"));
cch.put(new Element("kermit", "Piggy"));
//Retrieve a value for a given key
Element elt = cch.get("tarzan");
String sPartner = (elt == null ? null : elt.getObjectValue().toString());
System.out.println(sPartner); //Outputs "Jane"
//Required or the application will hang
cchm.removeAllCaches(); //alternatively: cchm.shutdown();
}
}