Tomcat 静态缓存“cacheTtl”

Posted

技术标签:

【中文标题】Tomcat 静态缓存“cacheTtl”【英文标题】:Tomcat static cache "cacheTtl" 【发布时间】:2021-11-03 08:08:56 【问题描述】:

谁能给我更多关于 Tomcat 静态缓存中使用的“cacheTtl”的详细信息?我在documentation 中看到它被提及

重新验证缓存条目之间的时间量(以毫秒为单位)。如果未指定,则默认值为 5000(5 秒)。

“缓存条目的重新验证”究竟是什么意思?如果我有太多缓存资源,这会影响我的应用程序的性能吗?

提前致谢!

【问题讨论】:

【参考方案1】:

“重新验证” 只是意味着再次从磁盘读取。因此,如果客户端请求静态资源:

如果资源在小于cacheTtl秒前被读取,则将返回缓存在Java堆内存中的数据, 如果资源在cacheTtl 秒前被读取,Tomcat 将再次从磁盘读取数据(并缓存)。

由于内存访问比磁盘访问快一个数量级(参见this question),如果缓存未满,则更长的 TTL 意味着更好的性能。当缓存变满时(超过 90% 的容量),Tomcat 可以在缓存条目达到其 TTL 之前驱逐它们。

然而,Tomcat 缓存对性能的真正影响要复杂得多,因为:

现代操作系统自己缓存打开的文件(使用应用程序不使用的 RAM),因此 “磁盘读取” 实际上可能几乎与 “堆内存读取”一样快。减少 Tomcat 的内存有时可能会提高性能, 现代操作系统有一个sendfile 系统调用:如果您想按原样将文件返回给客户端,操作系统可以为您完成(比 Java 代码快得多)。对于大于 48 KiB 的文件,Tomcat 的 DefaultServlet 默认使用 sendfile(参见 documentation)。没有必要缓存比这更大的文件。

【讨论】:

以上是关于Tomcat 静态缓存“cacheTtl”的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat如何快速响应静态资源(DefaultServlet+浏览器缓存)

Tomcat如何快速响应静态资源(DefaultServlet+浏览器缓存)

如何使用 Tomcat 启用静态内容(图像、css、js)的浏览器缓存?

Nginx配置静态资源缓存时间及实现防盗链

网页静态化

thinkphp的静态缓存,数据缓存,快速缓存,查询缓存