【发布时间】:2021-11-03 08:08:56
【问题描述】:
谁能给我更多关于 Tomcat 静态缓存中使用的“cacheTtl”的详细信息?我在documentation 中看到它被提及
重新验证缓存条目之间的时间量(以毫秒为单位)。如果未指定,则默认值为 5000(5 秒)。
“缓存条目的重新验证”究竟是什么意思?如果我有太多缓存资源,这会影响我的应用程序的性能吗?
提前致谢!
【问题讨论】:
谁能给我更多关于 Tomcat 静态缓存中使用的“cacheTtl”的详细信息?我在documentation 中看到它被提及
重新验证缓存条目之间的时间量(以毫秒为单位)。如果未指定,则默认值为 5000(5 秒)。
“缓存条目的重新验证”究竟是什么意思?如果我有太多缓存资源,这会影响我的应用程序的性能吗?
提前致谢!
【问题讨论】:
“重新验证” 只是意味着再次从磁盘读取。因此,如果客户端请求静态资源:
cacheTtl秒前被读取,则将返回缓存在Java堆内存中的数据,cacheTtl 秒前被读取,Tomcat 将再次从磁盘读取数据(并缓存)。由于内存访问比磁盘访问快一个数量级(参见this question),如果缓存未满,则更长的 TTL 意味着更好的性能。当缓存变满时(超过 90% 的容量),Tomcat 可以在缓存条目在达到其 TTL 之前驱逐它们。
然而,Tomcat 缓存对性能的真正影响要复杂得多,因为:
DefaultServlet 默认使用 sendfile(参见 documentation)。没有必要缓存比这更大的文件。【讨论】: