0

有一个问题,无法缓存影响我们系统负载的东西。

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

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

是否应该有一种方法来缓存未找到或未找到的事实?为什么或者为什么不?

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

4

2 回答 2

1

为什么不直接定义一个表示null 的常量值呢?然后缓存它,并在读取时考虑它。

于 2012-12-08T00:43:56.393 回答
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);
于 2012-12-08T00:44:44.483 回答