gpt4 book ai didi

caching - Guava Cache 的 BiMap 功能?

转载 作者:行者123 更新时间:2023-12-02 10:01:23 27 4
gpt4 key购买 nike

我在数据库中有一个简单的映射表,它将整数键与某些值关联起来。一旦我将这些值粘贴到表中,它们就永远不会消失。我想使用Guava Cache这样这些键可以被查找一次,然后保存在内存中。看起来 Guava Cache 可以让我轻松地做到这一点。但是,我需要两种方式映射:从键到值,以及从值到键,就像 BiMap 一样。

有没有一种简单的方法可以使用缓存来获取BiMap功能,或者我必须推出自己的解决方案?

是否有允许并发访问的 BiMap 实现,或者如果我想要高效的多线程访问,我是否必须使用读写锁?

最佳答案

Is there a simple way to get BiMap functionality using a Cache, or will I have to roll my own solution?

Maps.synchronizedBiMap,但我认为这不是一个好的起点,因为添加所有 Cache 功能可能比添加 困难得多Bi缓存

它也只是同步,而不是并发。

Is there a BiMap implementation that allows concurrent access,

据我所知没有。

or will I have to use read-write locks if I want efficient, multi-threaded access?

我想,这取决于您需要 BiMap 功能的哪一部分。 BiMap 允许您

  • 双向获取放置
  • 通过 forcePut 或通过 put 在冲突时抛出异常来保持双射性

如果您确定不会发生冲突,那么事情就没那么复杂。也许您所需要的只是像我一样搭载两个缓存here .

<小时/>

据我所知,为了保持双射性,你需要锁。如果写入不太常见,那么使用单个 ReadWriteLock 即可快速完成。否则....

您可以尝试使用 Striped 来获得最大并发性,但恐怕这太棘手了,因为您需要根据键和值来锁定 strip 。在使用 forcePut 的情况下,也会使用先前的值。

<小时/>

每当我使用 BiMap 时,我后来发现要么我实际上需要以两种以上不同的方式获取某些东西(一些辅助键),要么我需要获取一些附加信息。所以我将其转换为类中的两个或三个 map

void put(K1 k1, K2 k2, E extraInfo) {
MyEntry<K1, K2, E> e = new MyEntry<>(k1, k2, extraInfo);
firstMap.put(k1, e);
secondMap.put(k2, e);
}

MyEntry<K1, K2, E> getByFirstKey(K1 k1);
MyEntry<K1, K2, E> getBySecondKey(K2 k2);

这有点hacky,但是很简单,也许它也适用于您的缓存。

关于caching - Guava Cache 的 BiMap 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25961342/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com