使用guava缓存维护多个索引(内存表)

And*_*rei 16 java indexing caching guava

我正在尝试实现一个简化的内存缓存"表",其中有两种类型的索引:主要和次要.

  • 主索引将单个键(主键)映射到唯一值(Map接口)

  • 二级索引将单个键映射到值集合(Multimap符合条件)

非常类似于RDBMS世界中的表,其中一个表具有多个查找列.有时您希望通过PK进行搜索,有时会根据公共属性返回行列表.现在,除了equals(=)之外的其他操作没有必要(即没有范围查询或模式匹配).

将缓存语义添加到上述数据结构(逐出,数据填充/缓存加载,刷新等),这几乎是所需要的.

我想问一下你如何最好地解决问题的建议.应该是每个索引缓存还是缓存(对于PK)+(同步)二次索引的Multimap?

任何帮助深表感谢.

问候.

小智 2

您可以将 Map 替换为 Guava com.google.common.cache.Cache。它不支持 Multimap 类型语义,因此您必须使用

Cache<K, ? extends List<V>> 
Run Code Online (Sandbox Code Playgroud)

在这种情况下。

为了简单起见,我将使“主索引”成为辅助索引的子集 - 即,您有一个索引,它返回给定键的值列表,而主键仅返回具有单个值的列表。