Ehcache的Hello World示例是什么?

35

ehcache是一种高度可配置的工具,并且示例通常涉及多层接口,相对较为复杂。

是否有人遇到过最简单的示例,仅在内存中缓存像单个数字这样的东西(不分散,没有XML,只需尽可能少的Java代码行数)。然后将该数字缓存60秒,然后下一个读取请求会导致它获取新值(例如通过调用Random.nextInt()或类似方法)。

对于这样的问题,编写自己的缓存器(使用单例和少量同步)是否更快/更容易?

请勿使用Spring。

2个回答

38

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网站上描述得很好。

非常好,谢谢!然而,这并没有比一个带有(现在更新时间)>超时检查的单例更好。理想情况下,缓存应该在获取新结果的同时返回旧结果,以避免所有读取线程被阻塞几秒钟。Ehcache能做到这一点吗?还是我应该坚持使用单例和同步?非常感谢! - wingnut
据我所知,EhCache没有内置功能来检查最后更新的时间。您可以在更新时删除缓存条目,或在从缓存中获取之前进行自己的检查。EhCache将具有插入对象的时间戳,因此为您完成了这一点。当缓存填满时,它还会处理不经常使用的对象的删除。最后,如果选择,它允许您在未来做更多的事情。但是,是的,有时编写自己的代码会更简单。 - jbrookover
如果缓存中存储的对象值本身由于某些原因为空,该怎么办? - TechnoCrat
如果您关心了解缓存条目是否为空(不在缓存中)与数据是否为空,则需要添加一些逻辑。但是,如果需要,系统将缓存空值。 - jbrookover

13

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();
    }
}

1
简短而甜美的教程,涵盖了大多数使用EHCache所需了解的方法! - Tastybrownies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接