2

こんにちは、Redis をキャッシュ プロバイダーとして使用したいのですが、残念ながら redis シリアライザー (Json、String) は java.util.Optional をサポートしていません。

いくつかのコード行がそれをよりよく説明していると思います:

@Cacheable("test)
public Optional<Account> getAccount(String accountId){
  // ... call to some service or rest api
}

Optional はデフォルトの Java シリアライザーではシリアル化できず、JsonSerializer に Optional を処理するように指示する方法がまだわかりません。これはどのように機能しますか?Optional を取り除くというのは、私にとっては選択肢のようには思えません。

4

1 に答える 1

2

要するに:

すぐに使えるサポートはありません。

説明

Spring Cache (の一部spring-context) は、メソッドによって返される値をネイティブに格納し@Cacheableます。HashMap、Guava、または EhCache (レプリケーションなし)などのメモリ内キャッシュを使用する場合、これは正常に機能します。これ以上の開封はありません。Optionalキャッシング内で異なるセマンティクスを持つことができます。Optional.isPresent() == false値がキャッシュにないことを意味するか、使用可能な値がまったくないことを意味する可能性があります。

ただし、次の 2 つの方法があります。

  1. 特別な処理を実装する独自のシリアライザー (JDK シリアライザーに基づく) を作成します。Optional<T>
  2. CacheInterceptorに基づいて独自に作成しますCacheAspectSupportが、プロキシの配線を調整する必要があり、おそらくデフォルトを無効にする必要がありますCacheInterceptor

HTH、マーク

于 2015-11-12T07:06:00.013 に答える