2015-12-15 59 views
0

我試圖讓這個緩存在每天凌晨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 documentation,但它似乎只刷新已經加載到緩存中的數據。

TL; DR - 展望白天

+0

一般來說,你不得不安排預取數據的後臺線程,但往往超過本地高速緩存的大小。在這種情況下,您應該預熱遠程緩存層(例如memcached),這會使本地緩存未命中。 –

回答

0

從我可以告訴番石榴沒有任何東西在特定的時間來熱身有固定組鍵緩存內置的「刷新」 /某些預定時間的一組鍵的「溫暖」值,但您可以輕鬆地自行完成。

只需在您LoadingCache<String, Long>實例調用getAll(Iterable)預熱高速緩存

您可以溫暖你的現金。例如

loadingCache.getAll(keysToFreshen); 

keysToFreshenIterable<String>包含要在上午03點(或每當)清新鍵的實例(例如,Set<String>)。

運行與作業緩存變暖代碼/任務計劃

現在,您只需要使用工具安排在凌晨3點的作業/任務運行loadingCache.getAll(keysToFreshen)。您可以使用QuartzSpring,Java的ScheduledExecutorService(見here爲例)等