我有一個Java服務,它通過數據庫查找將String鍵轉換爲Long id。我將它封裝在一個Guava Cache中以減少數據庫查詢。從key到id的映射一旦設置就不會改變,所以我可以使用現有密鑰的過期時間。但是有一個時間問題(不是在Guava中,而是在我的應用程序中),有人可能會在密鑰進入數據庫之前查找密鑰的ID。我不想將這個「缺失」映射緩存很長時間。儘管如此,我仍然希望將其緩存起來,以避免查詢同一個缺失的密鑰。如何讓缺失條目在Guava中更快地過期
我讀到這個問題:Handle null value ...,從那裏我拼湊出一個解決方案與2個緩存。我有一個「丟失鍵」的緩存,我讓它更快地過期,並且沒有自動加載功能。我首先檢查這個緩存,如果我發現有什麼我知道這是一個缺失的關鍵。否則,我嘗試「真正的」緩存,捕獲ExecutionException以指示「丟失」,然後手動填充「丟失的鍵」緩存。這感覺很尷尬,尤其是在沒有映射的情況下,我在加載方法中拋出異常的部分。所以我想知道是否沒有更好的方法來處理這類問題。
這感覺不自然,但我認爲(鑑於我所瞭解的),它仍然是最靈活的解決方案。特別是因爲你也可以有不同的大小/驅逐設置,你會得到兩個統計數據。 – eckes