我在数据库中有一个简单的映射表,它将整数键与某些值相关联。一旦我坚持表中的价值观,他们永远不会消失。我想使用Guava Cache
,以便可以查找这些密钥,然后将其保存在内存中。它看起来像番石榴Cache
将允许我轻松地做到这一点。但是我需要映射两种方式:从键到值,从值到键,如BiMap
。
是否有使用BiMap
获取Cache
功能的简单方法,还是我必须推出自己的解决方案?
是否存在允许并发访问的BiMap
实现,或者如果我需要高效的多线程访问,是否必须使用读写锁?
答案 0 :(得分:2)
是否有一种使用Cache获取BiMap功能的简单方法,还是我必须推出自己的解决方案?
有Maps.synchronizedBiMap
,但我不认为这是一个很好的起点,因为添加所有Cache
功能可能比添加{更难“ {1}}到Bi
。
它也是同步的,而不是并发的。
是否存在允许并发访问的BiMap实现
AFAIK no。
或者如果我想要高效的多线程访问,我是否必须使用读写锁?
我想,这取决于您需要Cache
功能的哪一部分。 BiMap
允许您
BiMap
和get
put
或通过forcePut
在冲突中抛出异常来保持双重性如果您确定不会发生任何冲突,那么它并不复杂。也许你所需要的只是像我here那样搭载两个缓存。
AFAIK为了保持生命力,你需要锁定。如果写入不太常见,那么您可以使用单个put
快速完成。否则....
您可以尝试使用ReadWriteLock
来获得最大的并发性,但我担心,它太棘手了,因为您需要根据密钥和密钥来锁定条带值。以及Striped
的情况下的先前值。
每当我使用forcePut
时,我后来发现我实际上需要以两种以上的方式获得某些东西(一些二级密钥)或者我需要获得一些额外的信息。所以我将它转换为类似
BiMap
它有点hacky,但很简单,也许它也适用于你的缓存。