如何让丢失的条目在番石榴中过期更快

时间:2013-04-17 21:33:15

标签: java caching guava

我有一个Java服务,通过数据库查找将String键转换为Long id。我将它包装在Guava缓存中以减少数据库查询。从密钥到id的映射一旦设置就不会改变,因此我可以使用现有密钥的长过期时间。但是有一个时间问题(不是在Guava中,而是在我的应用程序中),有人可能会在数据库之前查找密钥的id。我不想缓存这个"缺少"映射很长时间。我确实想要缓存它,以避免对同一个丢失的密钥进行查询。

我读到了这个问题:Handle null value ...,从那里我拼凑了一个带有2个缓存的解决方案。我有一个"缺少键"缓存,我让它过期更快,它没有自动加载功能。我首先检查这个缓存,如果我发现了一些东西,我知道它是一个丢失的密钥。否则,我会尝试"真实"缓存,捕获ExecutionException以指示"缺少"然后手动填充"缺少的键"缓存。这感觉很尴尬,特别是在没有映射时我在load方法中抛出异常的部分。所以我想知道是否有一种更优雅的方式来处理这类问题。

1 个答案:

答案 0 :(得分:1)

您可以尝试基于refresh的内容,在其中实施CacheLoader.reload(key, oldValue)以积极刷新“缺失”映射,如果oldValue isn,则只保留oldValue “失踪。”