2017-08-16 22 views
0

我正在使用允許用戶更改顯示名稱的帳戶系統。要完成此操作,每個用戶都有一個UUID。在我的程序中的不同點,我可能有一個UUID,並希望它的當前顯示名稱,或者我可能有一個當前的顯示名稱,我想查找UUID。查找它涉及數據庫調用或http請求,所以我想將結果緩存在內存中。我熟悉Guava's LoadingCache,但似乎我必須創建兩個緩存(名稱 - > UUID和UUID - >名稱)才能完成此操作。 This seems bug-prone, similar to how a BiMap is better than two synchronous maps有沒有類似於雙向的LoadCache那裏?類似於番石榴的LoadingCache,但雙向?

+0

兩個用戶可以有相同的顯示名稱嗎?如果是這樣,那麼你的反向查找必須以某種方式處理,而不是一對一。您可能想要使用顯示名稱隱藏ID。 –

回答

1

對於這種情況,我不一定擔心一對緩存容易出錯:您不必擔心這兩個方向是同步的,如果不這樣做,就不會有真正的失敗。 UUID及其與用戶的關係不會改變。

保持雙向緩存正確同步是困難的,但在這種情況下,它似乎是矯枉過正。

+0

不夠公平,我想我主要關心的是查詢UUID - >名稱,並在詢問同名UUID後不久。我不想去查找我已經擁有的信息(雖然是在另一個緩存中倒退) – ThankThePhoenicians

+1

這種競爭條件有些不可避免,但是您可以通過執行'putIfAbsent'在反向緩存中。你將會有比賽,而且他們會導致比你想要的更多的問題,但是他們會是良性的比賽,如果有可能的話,更好的比賽會變得非常複雜。 –