0

システムの負荷に影響を与える何かをキャッシュできないという問題がありました。

バグが原因で、私のコードは間違ったパラメーターでサービスを呼び出していましたが、そのサービスはもちろん 404、null、空を返しました。基本的に、要求を満たすものは何も見つかりませんでした。何も見つからなかったという事実が、応答をキャッシュしていたプロシージャーに返されました。私のキャッシュ システムでは、値 null をキャッシュすることはできないため、基本的に応答をキャッシュできなかったり、応答がないという事実をキャッシュしたりすることができなかったため、このシナリオが発生するたびにライブ コールを行う必要がありました。バグのため、それはたくさん起こりました。

もちろんバグを修正しましたが、私の質問は、リソースが見つからなかったという事実をキャッシュする方法があるかどうか、および/またはキャッシュする必要があるかどうかです。このような安全策を講じていれば、バグはそれほど深刻ではなかったでしょう。

何かが見つからないかどうかをキャッシュする方法はありますか? なぜですか、そうでないのですか?

spymemcached クライアントで memcache サーバーを使用しており、私のコードは Java で書かれていますが、私の質問はその事実にとらわれないはずです。おそらく、他の実装では、cacheKey exists メソッドまたはそのようなものを提供できます。私はこれを調査しましたが、Java の世界で私の状況に適していると思われるものは何も見つかりませんでした。あったとしても、会社の基準で切り替えられない場合があります。

4

2 に答える 2

1

nullを表す定数値を定義しないのはなぜですか? 次に、それをキャッシュし、読み取り時に説明します。

于 2012-12-08T00:43:56.393 に答える
1

値が存在するかどうかを知る必要があり、null が有効な値である場合、通常は「ホルダー」または「シングルトン」クラスを使用します。例えば:

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 に答える