首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理Google Guava Cache中的条目

管理Google Guava Cache中的条目
EN

Stack Overflow用户
提问于 2019-06-25 06:47:13
回答 1查看 207关注 0票数 1

我需要用带有缓存的嵌入式数据库(Derby)开发Spring微服务(Guava cache)。

在每个客户中,条目的大小不同。

  • 如果我不设置maximumSize,会发生什么?大小会不断增长吗?会影响到尺寸吗?记忆?
  • 如果我要安排一个预先形成cleanUp的作业(每个间隔),什么时候条目将从缓存中移除?如果我只有refreshAfterWrite的话
  • 假设我在没有调用refreshAfterWrite的情况下设置了cleanUp,那么过期条目将从缓存中删除吗?(也就是说,我将打电话给cache.size(),看看它已经减少了)。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 07:55:28

有很多问题。它们都是在番石榴的CachesExplained维基页面上解释的。

如果我不设置maximumSize,会发生什么?大小会不断增长吗?

当满足其他条件或不再有内存可用时,条目将被释放。所以是的,只要不满足这些条件,规模就会增大。(“基于规模的驱逐”节)

会影响到尺寸吗?记忆?

maximumSize(long)指定特定的对象大小。默认情况下,它是缓存中存在的元素数。但是,如果使用weigher(Weigher),则可以说某个特定元素或多或少的值,因此使其更接近实际的内存使用情况。但是你必须写你自己的Weigher。(“基于规模的驱逐”节)

如果我要安排一个预先形成cleanUp的作业(每个间隔),什么时候条目将从缓存中移除?

调用cleanUp()方法时,这些条目将被清除。(“什么时候开始清理?”节)

如果我只有refreshAfterWrite,它会有什么影响?

如果使用cleanUp()缓存调用refreshAfterWrite,则无论是否触发refreshAfterWrite,都必须再次加载希望访问的条目。

假设我在没有调用refreshAfterWrite的情况下设置了cleanUp,那么过期条目将从缓存中删除吗?

不,refreshAfterWriteexpireAfterWrite不一样。该条目将符合刷新的条件,但不会被删除。如果使用expireAfterWrite,则条目将过期并被删除。

(也就是说,我将调用cache.size()并查看它已经减少)。

它不是这样工作的。缓存不是有保证的工作程序。这不像一个收藏品。在计算大小时,可能没有考虑到一些条目,或者某些条目仍然被计算为大小的一部分,但还没有有效地删除。这是显式的方法

大小 长尺寸() 返回此缓存中的大约条目数。

基本上,您应该真正地阅读番石榴的CachesExplained维基页面的全部文档。所有的实际信息都在那里,以一种非常描述性的方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56748254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档