1

このキャッシュを毎日午前 3 時に更新しようとしています。問題は、ユーザーがキャッシュがウォームアップするまで長時間待たなければならないことです。そのため、一晩でリフレッシュして、翌朝すぐに UI にアクセスできるようにしておくことをお勧めします。

    return CacheBuilder.newBuilder()
            .maximumSize(1000)
            .expireAfterAccess(1, TimeUnit.DAYS)
            .build(new CacheLoader<String, Long>() {
                @Override
                public Long load(String key)
                        throws Exception {
                        return db.getMetrics(key);
                }
            });

キャッシュ内のキーの固定セットを提供して、午前 3 時に更新できるようにしたいと考えています。

Google のドキュメントを読みましたが、既にキャッシュに読み込まれているデータのみが更新されるようです。

TL;DR - 1 日の特定の時間に、固定された一連のキーを使用してキャッシュをウォームアップしようとしています。

4

1 に答える 1

1

私が言えることから、グアバには、スケジュールされた時間に一連のキーの値を「フレッシュ」/「ウォーム」するための組み込み機能はありませんが、自分で簡単に行うことができます。

キャッシュのウォーミング

インスタンスを呼び出すだけで現金を温めることができgetAll(Iterable)ますLoadingCache<String, Long>。例えば

loadingCache.getAll(keysToFreshen);

午前 3 時 (またはいつでも) に更新するキーを含む のkeysToFreshenインスタンスはどこにありますか (例: a )。Iterable<String>Set<String>

ジョブ/タスク スケジューラでキャッシュ ウォーミング コードを実行する

loadingCache.getAll(keysToFreshen)ツールを使用して実行し、午前 3 時にジョブ/タスクをスケジュールするだけです。QuartzSpring、Java ScheduledExecutorService(例についてはこちらを参照) などを使用できます。

于 2015-12-15T15:17:37.260 に答える