私たちのプロジェクトでは、主にI/O結果をキャッシュするためにInfinispanとSpringの@Cacheable
注釈を使用しています。Infinispanをブロッキングキャッシュとして使用することはできますか?
複数の同時呼び出しがあるので、2つのスレッドが同じデータ取得を2回実行するのを避けたいので、最初の呼び出しが完了して結果を返すまでブロックをブロックします(同じキャッシュキーを使用します)。
私はこれを自動的にサポートするEhcacheのSelfPopulatingCache
に慣れていますが、Infinispanにも同様の機能がありますか?
理想的には、これはSpringの@Cacheable
によって使用されるべきであり、定型記号を避けることが理想です。私は、Spring 4.3が今や@Cacheable.sync()
を持っていることに気付きましたが、ヒントに過ぎず、基礎となるキャッシュプロバイダの実装に依存していることが示されています。また、私たちはSpring 4.3にはまだありませんので、4.2のソリューションがより良いでしょう。
[呼び出すメソッド](https://github.com/spring-projects/spring-framework/blob/master/spring-context-support/src/main/java/org/springframework)を呼び出すためのSpringのJCacheアダプタプロキシ/cache/jcache/JCacheCache.java#L80)に 'sync'機能を追加しました。だから、サポートはおそらく、おそらくあなたはそれを直接呼び出すことができます。 –
@BenManes 'JCacheCache'は基になる' JCache'に委任しますが、自動的にブロックされません。 –
'invoke'はアトミックであると仮定されているので、ターンを待つときにブロックされる可能性があります。実際には、JCacheはローダーを使用しない限り、JCacheが許可していないので、ロックフリーの読み込みではなく、 'sync(key)'のように動作するはずです。 –