0

Google の guava utils を使用して、サーバーにローカル キャッシュを追加しています。

guava は私のシナリオに非常に適していますが、「null 以外」の値のみをローカル キャッシュに格納できます (com.google.common.cache.Cache と com.google.common.cache.LoadingCache の両方が格納できます)。

うーん、これはもったいない。時間切れやその他の理由により、サーバーがリモートデータベースから値を取得できない可能性があるためです。guava にデフォルト値を指定すると、それはローカル キャッシュに保存され、いくつかの削除条件が満たされない限り、常にそこに存在します。しかし問題は、グアバに妥当なデフォルト値を与えることができないということです。

なぜグアバにこの制約があるのか​​、どうすればそれを回避できるのか、誰か教えてもらえますか? 私の場合、ehcacheの方が適していますか?

4

4 に答える 4

1

Null Object デザイン パターン http://en.wikipedia.org/wiki/Null_Object_patternを使用できます

于 2013-08-27T11:39:50.757 に答える
0

Elementehcache では、null 値と存在しないキーを区別できますが、追加のクラスが必要です。

// ehcache
cache.put(new Element("key1", null));
assertNull(cache.get("key1").getObjectValue());  // null value
assertNull(cache.get("key2"));  // key is not exist

guava では、余分なクラスを使用する必要はありませんが、null 値と存在しないキーを区別できません。

// plain guava
cache.put("key1", "value1");
assertNull(cache.getIfPresent("key2"));  // key is not exist

他の人が言ったように、null オブジェクト パターンまたはOptionalグアバを使用できます。このような追加のクラスを使用すると、nullehcache のような値を処理できます。

// guava with Optional
cache.put("key1", Optional.absent());
assertFalse(cache.getIfPresent("key1").isPresent());  // null value
assertNull(cache.getIfPresent("key2"));  // key is not exist
于 2013-08-27T12:14:02.897 に答える