我需要用带有缓存的嵌入式数据库(Derby)开发Spring微服务(Guava cache)。
在每个客户中,条目的大小不同。
maximumSize,会发生什么?大小会不断增长吗?会影响到尺寸吗?记忆?cleanUp的作业(每个间隔),什么时候条目将从缓存中移除?如果我只有refreshAfterWrite的话refreshAfterWrite的情况下设置了cleanUp,那么过期条目将从缓存中删除吗?(也就是说,我将打电话给cache.size(),看看它已经减少了)。谢谢
发布于 2019-06-25 07:55:28
有很多问题。它们都是在番石榴的CachesExplained维基页面上解释的。
如果我不设置
maximumSize,会发生什么?大小会不断增长吗?
当满足其他条件或不再有内存可用时,条目将被释放。所以是的,只要不满足这些条件,规模就会增大。(“基于规模的驱逐”节)
会影响到尺寸吗?记忆?
maximumSize(long)指定特定的对象大小。默认情况下,它是缓存中存在的元素数。但是,如果使用weigher(Weigher),则可以说某个特定元素或多或少的值,因此使其更接近实际的内存使用情况。但是你必须写你自己的Weigher。(“基于规模的驱逐”节)
如果我要安排一个预先形成
cleanUp的作业(每个间隔),什么时候条目将从缓存中移除?
调用cleanUp()方法时,这些条目将被清除。(“什么时候开始清理?”节)
如果我只有
refreshAfterWrite,它会有什么影响?
如果使用cleanUp()缓存调用refreshAfterWrite,则无论是否触发refreshAfterWrite,都必须再次加载希望访问的条目。
假设我在没有调用
refreshAfterWrite的情况下设置了cleanUp,那么过期条目将从缓存中删除吗?
不,refreshAfterWrite和expireAfterWrite不一样。该条目将符合刷新的条件,但不会被删除。如果使用expireAfterWrite,则条目将过期并被删除。
(也就是说,我将调用cache.size()并查看它已经减少)。
它不是这样工作的。缓存不是有保证的工作程序。这不像一个收藏品。在计算大小时,可能没有考虑到一些条目,或者某些条目仍然被计算为大小的一部分,但还没有有效地删除。这是显式的方法
大小 长尺寸() 返回此缓存中的大约条目数。
基本上,您应该真正地阅读番石榴的CachesExplained维基页面的全部文档。所有的实际信息都在那里,以一种非常描述性的方式。
https://stackoverflow.com/questions/56748254
复制相似问题