使用 番石榴缓存 存储值(假设它们是字符串,但您可以将其更改为任何类型),如下所示:
LoadingCache<String, String> vaultData = CacheBuilder.newBuilder() .expireAfterAccess(10, TimeUnit.MINUTES) .build( new CacheLoader<String, String>() { public String load(String key) throws AnyException { return actuallyLoadFromVault(String); } });
这样,当您的代码将从中读取一些密钥时 vaultData 这将是第一次使用 actuallLoadFromVault (您需要写出原因)以及之后对该键的任何新访问权限 vaultData 将点击存储在内存中的缓存值。
vaultData
actuallLoadFromVault
在10分钟后正确配置,将从缓存中擦除该值(请阅读 https://github.com/google/guava/wiki/CachesExplained#when-does-cleanup-happen 和 Guava如何在CacheBuilder中过期? 正确配置)。
您可能需要设置最大高速缓存大小以限制内存消耗。看到 文件 详情。