2017-07-24 39 views
0

我有一個客戶端通過令牌提供對apis的訪問。他們不是OAuth令牌。只需一個簡單的http獲取請求來獲取令牌。此令牌過期,我們可以在此之前刷新以獲取新令牌。我正在考慮使用Google LoadingCache執行此操作,如果不爲null,則獲取該標記,否則將向客戶端發送請求以獲取該標記。但是,當值爲空時會發生這種情況。 (在我的情況下,第一次)之後,我只需要定期刷新它到期之前。使用加載緩存有意義嗎?或者有沒有其他方法可以實現這一目標? 此外,如果它這樣做是我想的方法---我希望它調用一個函數/方法刷新令牌。我不確定是否重載load方法只會在null或每次刷新/過期時調用。緩存在到期/刷新時是否會清空?我可以使用以前的令牌刷新令牌。所以我需要緩存中的值來發送請求。下面是我在想什麼正在調用LoadingCache刷新方法

 private static LoadingCache<String, Optional<String>> cache = CacheBuilder.newBuilder() 
     .build(new CacheLoader<String, Optional<String>>() { 
      @Override 
      public Optional<String> load(String key) throws Exception { 
       return Optional.fromNullable(refreshToken(key)); 
      } 
     }); 

我想我需要知道,如果在緩存過期時相同的負載方法將被調用?

回答

0

是的,如果你打電話給LoadingCache.get()它會調用你的load()方法。但是,緩存的值不會自動過期 - 您必須通過CacheBuilder手動刪除它們(例如,通過Cache.invalidate())或configure the desired eviction semantics

例如,如果您知道令牌在10分鐘後過期,則可以使用expireAfterWrite(9, TimeUnit.MINUTES)(9分鐘爲您提供一些緩衝時間,您可以選擇不同的時間量)。

另一方面,如果您只是通過發出請求並讓它被拒絕來發現令牌已過期,那麼在請求失敗後,您可能需要手動使條目無效。然後,對.get()的下一個調用將調用​​,然後返回一個新的令牌。

相關問題