問題タブ [google-guava-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
164 参照

java - expireAfterAccess を使用して Guava キャッシュを期限切れにするために実行されるメソッドはどれですか?

Guava キャッシュ マネージャーと設定expireAfterAccess値を使用しています。キャッシュからエントリを期限切れにするために呼び出されるメソッドを知りたいですか?

0 投票する
0 に答える
1584 参照

java - Google Guava CacheBuilder - MongoDB コレクションからの一括読み込みに関する問題

Google Guava の CacheLoader loadAll() メソッドをオーバーライドしようとしています。一括検索を実行して、CachesExplainedに記載されているように特に要求されていない Employee コレクション内のすべてのドキュメントを取得したいと考えています。

特に要求されていないキーの値をロードする CacheLoader.loadAll 実装を作成できることに注意してください。たとえば、あるグループの任意のキーの値を計算すると、グループ内のすべてのキーの値が得られる場合、loadAll はグループの残りの部分を同時にロードする可能性があります。

私はインターネットを精査しましたが、私の問題にリモートで関連していることがわかった唯一の投稿は、Google Guava の CacheLoader loadAll() method Implementation Issuesでした。ただし、コレクションからすべてのドキュメントを一括取得することはまだできません。コードを実行するたびに、データベースから取得される値は、List を介して具体的に渡された値だけです。

Mongo コレクション名 Employees があり、その中に 3 つの従業員ドキュメントがあるとします。

従業員クラス:

このメソッドを実行するたびに:

印刷するだけです:

上記のCachesExplainedからの引用で説明されている 3 つの名前すべての代わりに。

上記の引用を誤解していますか? CacheLoader は、コレクションからすべての値を取得するのではなく、loadAll() メソッドに渡された値のみを取得しますか? どんな助けでも大歓迎です

0 投票する
1 に答える
366 参照

java - グアバのキャッシュサイズが空ですか?

システムが空のグアバキャッシュにスペースを事前に割り当てているかどうか疑問に思っていますか? 私はグアバキャッシュを初めて使用します。誰かがこの問題を理解するのを手伝ってくれますか?

また、以下のコードでテストします。

奇妙なことは、使用済みメモリが減少したことです.....理由はわかりません。誰かがこれを説明できますか。

どうもありがとう : )

0 投票する
0 に答える
888 参照

java - Google Guava LoadingCache を使用してタイム エビクションとフォールバックを備えたキャッシュを実装する方法

https://github.com/google/guava/wiki/CachesExplainedを読んだ後、Google Guavaのキャッシュは素晴らしいです

実装したいのは、次の要件を満たす必要があります。

  1. 特定のキーのキャッシュは 10 分後に期限切れになるため、get(key) の次の呼び出しでは常にcreateExpensiveGraph(key)タイマーの更新とリセットが呼び出されます (expireAfterWrite既にこれを行っていると思います)。
  2. 予期しないエラーが原因で への次の呼び出しがcreateExpensiveGraph(key)失敗した場合、次の呼び出しが 10 分後に発生した場合でも、古い値を使用したいと思います。

1の場合はGuavaの性質だと思いますLoadingCacheが、2の場合は1を維持しながらどのように実装できますか?

0 投票する
1 に答える
360 参照

java - Guava Cache でダーティ データを処理する方法

Guava Cache私は自分のデータをキャッシュするために使用します。数分間使用されていない場合、キャッシュ内のデータは消去されます。

データを変更すると、キャッシュ内のデータが更新され、データが「ダーティ」とマークされます (変更されるため、データベース内のデータとは異なるため)。そして、5分ごとに「ダーティ」データをデータベースにプッシュします(つまり、データベース内のデータを更新します)。

問題は、「ダーティ」データ A があることです。データ A がデータベースにプッシュされる前に、データ A が最初に消去され、「ダーティ」データ A が失われます。

そのため、データが消去されRemovalListenerたときに に を追加すると、は私に気づき、私はコールバック関数を実行します。関数では、データをキャッシュに戻そうとします。ただし、マルチスレッド環境では、データが正しいとは限りません。Guava CacheRemovalListener

例えば:

1) キャッシュ: クリーン データ A

2) スレッド 1: データ A を取得します。キャッシュ内のデータ A は消去されているため、キャッシュはデータベースからデータ A を取得します。データベース内のデータ A は最新ではありません。そのため、スレッド 1 は正しくないデータ A を取得します。

3) キャッシュ: RemovalListener コールバックを実行します。

では、マルチスレッドでデータが常に正しいことを約束できるように、ダーティ データを処理するにはどうすればよいでしょうか。ありがとう!

0 投票する
1 に答える
6834 参照

java - java - invalidateAll() と cleanUp() の Google グアバ キャッシュの違い

Cache次のように定義されている があるとします。

私が読んだものから(間違っている場合は修正してください):

値がCache0:00 に書き込まれた場合、60 秒後に「削除準備完了」ステータスに移行する必要があります。からの値の実際の削除はCache、次のキャッシュの変更時に行われます(キャッシュの変更とは正確には何ですか?)。そうですか?

invalidateAll()また、メソッドとメソッドの違いがわかりませんcleanUp()。誰かが説明を提供できますか?

0 投票する
1 に答える
984 参照

java - Guava LoadingCache からレコードを確実に削除するには?

Guava を使用してデータを入力していますが、1 分ごとにLoadingCacheすべてのエントリを削除したいと考えています。LoadingCache

incrementマルチスレッドの方法で、コード内のさまざまな場所からメソッドを呼び出しています。そのため、1 分間で多くのメトリックが に入力されclientIdMetricCounterCacheます。ここで、これらすべてのメトリックを 1 分ごとに確実にドロップし、それらすべてのメトリックをデータベースに送信したいと考えています。

私の場合、incrementメソッドへの書き込みが非常に遅い場合がありますが、それでも1分ごとにすべてのエントリを削除したいのですが、このキャッシュで読み取りをまったく行っておらず、書き込みを行ってから、それらのレコードを送信して削除します他のシステム。以下は、Guava wikiで見たものです

CacheBuilder で構築されたキャッシュは、クリーンアップを実行せず、値を「自動的に」削除したり、値の有効期限が切れた直後に削除したり、そのようなものを削除したりしません。代わりに、書き込み操作中、または書き込みがまれな場合は時折の読み取り操作中に少量のメンテナンスを実行します。

では、どのように機能しexpireAfterWriteますか?1分ごとに実行され、そこにあるすべてのエントリclientIdMetricCounterCacheを削除し、1分後に再び起動して同じキャッシュからすべてのエントリを削除し、そのように続行するスケジューラのように機能しますか? ウィキを読んだ後、そのように機能するとは思えません。そうでない場合、書き込みがしばらくの間まれになる可能性があるため、これらのレコードを1分ごとに確実にドロップし、他のシステムに送信するにはどうすればよいですか?

Guava TimeLimiterインターフェイスを使用する必要があるように見えますか、SimpleTimeLimiterまたはScheduledExecutorService呼び出しを確実にタイムアウトしてからエントリをドロップする必要があるように見えますか? はいの場合、誰かが私の現在の例でこれがどのように機能するかの例を提供できますか?

0 投票する
1 に答える
4625 参照

java - Google Guava を使用してリストを取得する

私はGuavaが初めてで、ユーザーのコンマ区切りリストを基本的にStringで返したいと思っています。リストを取得するために 1 つのサードパーティ API を使用しています。そのリストをキャッシュし、ユーザーがクエリを実行した場合にそのリスト全体を返したいと考えています。

オンラインでいくつかの例を見たところ、LoadingCache<k, v> and CacheLoader<k,v>. 2 番目の引数はなく、ユーザー名は一意です。私たちのアプリケーションは、ユーザーに対する個別のクエリをサポートしません。

それを可能にする / I can twik のフレーバーはありますLoadingCacheか? 何かのようなもの

0 投票する
1 に答える
135 参照

java - Guava CacheBuilder は予定より早くアイテムを削除します

いくつかのデータ要素をマップに格納できる単純なキャッシュを作成しようとしています。このデータを約 16 時間保持する必要があり、その後は古いアイテムを期限切れにすることができます。したがって、LoadingCache をインスタンス化しています。

1 分ごとに最大 16 個のアイテムをリストに追加するプロセスがあります。約 12 分ごとに、キャッシュが完全に消去されます。expireAfterWrite() で設定された時間よりもかなり前に、キャッシュが一掃される原因に困惑しています。

0 投票する
2 に答える
4362 参照

maven - IntelliJ IDEA で Maven Guava 依存関係「シンボル 'google' を解決できません」

IntelliJ は、シンボル 'google' を解決できないと言います。このインポートについて:

依存関係を正しく追加しましたが、それについて文句はありません:

Maven リポジトリを更新しました。IntelliJ IDEA で Maven 自動インポートを有効にしています。私のプロジェクトは SDK バージョン 1.8 を使用しています。ウェブ上の多数の例に基づいて、これは機能するはずですが、機能しません。

これは似たようなものであることがわかりました(コードがコンパイルされないため、同じ問題ではありませんが)。キャッシュを無効にして再起動してみましたが、だめでした。一番上の回答では、IDEA システム ディレクトリを削除することも提案されています。これが良いアイデアなのかどうか、そうするとどれだけ壊れるかはわかりません。