我正在使用允許用戶更改顯示名稱的帳戶系統。要完成此操作,每個用戶都有一個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
A
回答
1
對於這種情況,我不一定擔心一對緩存容易出錯:您不必擔心這兩個方向是同步的,如果不這樣做,就不會有真正的失敗。 UUID及其與用戶的關係不會改變。
保持雙向緩存正確同步是困難的,但在這種情況下,它似乎是矯枉過正。
+0
不夠公平,我想我主要關心的是查詢UUID - >名稱,並在詢問同名UUID後不久。我不想去查找我已經擁有的信息(雖然是在另一個緩存中倒退) – ThankThePhoenicians
+1
這種競爭條件有些不可避免,但是您可以通過執行'putIfAbsent'在反向緩存中。你將會有比賽,而且他們會導致比你想要的更多的問題,但是他們會是良性的比賽,如果有可能的話,更好的比賽會變得非常複雜。 –
相關問題
- 1. 番石榴LoadingCache:內的CacheLoader
- 2. 在谷歌番石榴loadingCache
- 3. 番石榴有雙向功能嗎?
- 4. 子類番石榴的ImmutableSet
- 5. C#.Net中LoadingCache(番石榴)的替代方案4
- 6. 設計一個變量條目到期的番石榴LoadingCache
- 7. Floats.tryParse()番石榴
- 8. ClassNotFoundException的番石榴
- 9. 番石榴映射
- 10. 番石榴和javafx
- 11. 番石榴表ConcurrentModificationException
- 12. 番石榴資源
- 13. 番石榴入門
- 14. Java番石榴CartesianProduct
- 15. 番石榴功能
- 16. 番石榴和Weblogic:ClassNotFoundException
- 17. 是否有類似C++的番石榴類庫?
- 18. 番石榴 - 地圖支持番石榴功能
- 19. 關於番石榴的查詢ListenableFuture
- 20. 番石榴的HashBaseTable cellSet()
- 21. 番石榴:Throwables.propagate和InterruptedException的
- 22. 番石榴TypeToken和泛型類
- 23. 番石榴函數與通用類型
- 24. 不明白番石榴PrimitiveSink
- 25. 番石榴Multimap containsEntry問題
- 26. 使用番石榴表
- 27. 番石榴表替代
- 28. 遍歷表番石榴
- 29. 番石榴文件緩存
- 30. 番石榴:CharEscaper在哪裏?
兩個用戶可以有相同的顯示名稱嗎?如果是這樣,那麼你的反向查找必須以某種方式處理,而不是一對一。您可能想要使用顯示名稱隱藏ID。 –