如何使用EHCACHE 3缓存null值



我需要用eHcache 3缓存null值。对于ehcache 2,我在这里找到了类似的示例:

  • http://www.ehcache.org/documentation/2.8/recipes/cachenull.html
// cache an explicit null value:
cache.put(new Element("key", null));
Element element = cache.get("key");
if (element == null) {
// nothing in the cache for "key" (or expired) ...
} else {
// there is a valid element in the cache, however getObjectValue() may be null:
Object value = element.getObjectValue();
if (value == null) {
    // a null value is in the cache ...
} else {
    // a non-null value is in the cache ...
  • https://codereview.stackexchange.com/questions/60393/ususe-ehcache-the-right-way

是否有ehcache 3的示例,因为它似乎是net.sf.ehcache.element不再存在了吗?

我也看过以下评论:https://github.com/ehcache/ehcache3/issues/1607

的确,您不能缓存零值,这也是JCACHE规范的行为。 如果您需要在应用程序中使用此功能,则可以创建哨兵值或从应用程序中包装您的值。

当然,如果我的返回对象为null,则可以构建一些逻辑,如果我仅存储我的钥匙,则可以将其放在另一组中。当然,我还需要检查我的ehcache和我的"特殊"集。

您的问题包含答案,您需要使用NULL对象模式或相关解决方案包装/隐藏nulls。

没有,并且不会有对null键的支持或EHCACHE3。

中的值

我只是创建了一个零占位符类。

public class EHCache3Null implements Serializable {
  private static final long serialVersionUID = -1542174764477971324L;
  private static EHCache3Null INSTANCE = new EHCache3Null();
  public static Serializable checkForNullOnPut(Serializable object) {
    if (object == null) {
      return INSTANCE;
    } else {
      return object;
    }
  }
  public static Serializable checkForNullOnGet(Serializable object) {
    if (object != null && object instanceof EHCache3Null) {
      return null;
    } else {
      return object;
    }
  }
}

然后,当我使用缓存时,我对PUT操作的以下内容:

cache.put(element.getKey(), EHCache3Null.checkForNullOnPut(element.getValue()));

,然后在我的Get操作中:

Serializable value = EHCache3Null.checkForNullOnGet((Serializable) cache.get(key));

相关内容

  • 没有找到相关文章

最新更新