我正在使用允许用户更改显示名称的帐户系统。要完成此操作,每个用户都有一个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
- 2. 番石榴有双向功能吗?
- 3. 子类番石榴的ImmutableSet
- 4. Floats.tryParse()番石榴
- 5. ClassNotFoundException的番石榴
- 6. 番石榴功能
- 7. 番石榴和Weblogic:ClassNotFoundException
- 8. 番石榴表ConcurrentModificationException
- 9. 番石榴资源
- 10. 番石榴入门
- 11. 番石榴 - 地图支持番石榴功能
- 12. 番石榴TypeToken和泛型类
- 13. 设置PITest为番石榴
- 14. FileBackedOutputStream用例(番石榴)
- 15. 番石榴Multimap列表
- 16. 番石榴RateLimiter爆裂
- 17. 如何与CacheBuilder番石榴
- 18. 番石榴文件缓存
- 19. 链接到番石榴javadoc
- 20. 番石榴进口问题
- 21. 番石榴函数参数
- 22. 遍历表番石榴
- 23. 番石榴函数组合
- 24. 番石榴散列用例
- 25. 用于解决原始类型警告的番石榴TypeToken
- 26. 番石榴可以用于反射名称加载的类吗?
- 27. 检测到番石榴问题#1635,表明正在使用的番石榴少于16.01版本
- 28. 番石榴迭代器嵌套的foreach
- 29. 番石榴的版本如何工作?
- 30. 番石榴的ComparisonChain转换为JavaScript
两个用户可以有相同的显示名称吗?如果是这样,那么你的反向查找必须以某种方式处理,而不是一对一。您可能想要使用显示名称隐藏ID。 –