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

我读了这个问题: 处理null值... ,然后我将2个缓存的解决方案拼凑在一起。 我有一个“丢失键”缓存,我让它更快地过期了,它没有自动加载功能。 我先检查此缓存,如果在其中找到了某些内容,我知道它丢失了密钥。 否则,我尝试“真正的”缓存,捕获一个ExecutionException以指示“丢失”,然后手动填充“缺失键”缓存。 感觉很尴尬,尤其是在没有映射的情况下在load方法中引发异常的部分。 因此,我想知道是否没有更优雅的方式来处理此类问题。

===============>>#1 票数:1

您可以尝试基于refresh ,在该方法中,您实现CacheLoader.reload(key, oldValue)来积极刷新“丢失”的映射,如果oldValue不“丢失”,则只需保留oldValue

  ask by jfrank translate from so

未解决问题?本站智能推荐: