缓存资源不存在的事实

时间:2012-12-08 00:35:52

标签: java memcached

存在无法缓存某些影响我们系统负载的问题。

由于存在错误,我的代码调用的服务参数不正确,该服务当然返回404,null,为空。基本上,没有发现任何东西满足要求。没有找到任何内容的事实被返回到缓存响应的过程。我的缓存系统不允许我们缓存值null,因此我们基本上无法缓存响应或没有响应的事实,因此我们不得不在每次发生这种情况时进行实时调用。由于这个错误,它发生了很多。

我当然修复了这个错误,但我的问题是,是否存在和/或应该是一种缓存无法找到某些资源这一事实的方法。如果我们能够拥有这样一个安全网,那么这个bug就不会那么严重了。

是否应该有办法缓存未找到某些内容的事实?为什么或为什么不呢?

我正在使用带有spymemcached客户端的memcache服务器,我的代码是用Java编写的,尽管我的问题应该与这个事实无关。也许其他实现可以提供cacheKey存在方法或类似的东西。我已经研究了这个,并且在Java世界中找不到任何我认为适合我的情况的东西。即使有,由于公司标准,我也可能无法切换到它。

2 个答案:

答案 0 :(得分:1)

为什么不定义代表 null的常量值?然后缓存该内容,并在阅读时对其进行说明。

答案 1 :(得分:1)

当你需要知道一个值是否存在,并且null是一个有效值时,我通常会使用“holder”或“singleton”类。例如:

public final class Singleton<T> {
  private final T value;
  public Singleton(T value) {
    this.value = value;
  }
  private final T get() {
    return value;
  }
}

所以现在而不是:

// if this returns null, does it mean the document doesn't exist 
// or there's nothing in the cache?
public Document getCached(String name);

您可以使用:

// if this returns null, there's nothing in the cache
// if non-null, the singleton wrapper may contain a null value,
// indicating the document doesn't exist
public Singleton<Document> getCached(String name);