Guava 缓存,一对多键值

问题描述 投票:0回答:1

这是我第一次在这里发布问题,我是 Guava Cache 的新手,所以请直接告诉我:)。 我面临两个问题:

  1. 关于键 - 在数据库本身中,键与我提取的值之间的关系是一对多。

假设当我的缓存配置为 时,我有以下场景 - 正在寻找“key1”。

在给定的缓存状态下,我有: “key1” -> (val1, val2, val3,...).

在数据库中我还有:“key1” - val4,“key1” - val5

现在,据我了解,只有当 LoadingCache 注意到缺少键时,它才会查询数据库。因此,在这种情况下,它不会加载我需要的缺失值,因为它会看到缓存中的键 - 导致数据加载丢失。

  1. 假设我解决了第一个问题 - 现在我不确定应该如何将新添加的值连接到缓存中的现有值。

也许我在理解机制方面遗漏了一些东西。

非常感谢您的帮助, 预先感谢!

尝试实现一个具有一对多键值映射的缓存。 多个值映射到一个键(在缓存中)。 不确定我应该如何实施它。

java spring-boot guava
1个回答
0
投票

您可以将

refreshAfterWrite
添加到缓存生成器,以便它在一定时间段后自动刷新缓存。

 LoadingCache<String, List<String>> cache = CacheBuilder.newBuilder()
            .refreshAfterWrite(5, TimeUnit.MINUTES) // Set a refresh interval, e.g., every 5 minutes
            .build(new CacheLoader<String, List<String>>() {
                @Override
                public List<String> load(String key) {
                    // Load the list of values for the given key from the database
                    List<String> valuesFromDB = loadValuesFromDB(key);

                    // Return the loaded values
                    return valuesFromDB;
                }
 });
© www.soinside.com 2019 - 2024. All rights reserved.