Invidious 缓存配置完整指南:3 处调整让视频秒开不再转圈
2026/9/14 5:54:14 网站建设 项目流程

Invidious 缓存配置完整指南:3 处调整让视频秒开不再转圈

【免费下载链接】invidiousInvidious is an alternative front-end to YouTube项目地址: https://gitcode.com/GitHub_Trending/in/invidious

你是不是一打开 Invidious 实例里的视频,转圈转十几秒还不动,换下一个照样慢?网络明明没问题,换台实例却很快。差别往往不在网速,而在 Invidious 缓存有没有真正生效。

Invidious 是 YouTube 的替代前端,它的缓存层负责把已经取过的视频数据存下来,让你不必每次都回 YouTube 取一遍。这篇文章讲清楚它分几层缓存、哪 3 处配置能动手、以及容易踩的坑,照着做 10 分钟能搞定。

看懂"转圈"现象:Invidious 的三层缓存速览

先说结论:Invidious 的缓存分三层,各管各的数据。

类比一下超市:收银台(浏览器缓存)直接发你买过的东西;货架(Invidious 内存缓存)放着常用货,不用跑仓库;仓库(PostgreSQL 数据库)存完整库存,但超过 6 小时没盘点就作废、重新进货。

缓存层位置存什么有效期
浏览器你的设备CSS、JS 等静态资源跟随 HTTP 缓存头
内存Invidious 进程5MB 以内的静态文件进程重启即清空
数据库PostgreSQL视频元数据、注释6 小时

第一层来自改造后的静态文件处理器 src/ext/kemal_static_file_handler.cr:静态文件只要塞得进 5MB 上限,就留在内存里,后续请求不碰磁盘。第三层在 src/invidious/database/videos.cr,视频元数据入库后,后台任务每小时清一次过期项:

DELETE FROM videos * WHERE updated < (now() - interval '6 hours')

这意味着:6 小时内,不管多少人打开同一个视频,只有第一个人需要真正跑一趟 YouTube。

开启 Invidious 缓存:3 步把配置打开

第 1 步:打开注释缓存。在 config/config.example.yml 里有一项cache_annotations,默认关闭。打开后,视频注释取过一次就会存进数据库,下次直接读库:

cache_annotations: true

第 2 步:保持 preload 开启。同文件的default_user_preferences段里,preload: true让浏览器在页面加载时就提前缓冲视频数据,配合缓存才真正有"秒开"体感。这项默认就是 true,确认你没把它关掉即可。

第 3 步:认清 6 小时过期是写死的。想把元数据有效期放宽到 12 小时,得改源码里那个interval '6 hours'再重新编译,不是配置文件能调的参数。没有明确需求就别动——6 小时是数据新鲜度和负载之间的官方折中。

改完重启实例,偏好和订阅页的对应选项会同步生效,方便你确认:

避开缓存坑:开了缓存还在"转圈"怎么办

⚠️ 三种典型情况,按"现象 → 原因 → 处理"来:

现象原因处理
注释每次加载都慢cache_annotations还是 false;或注释是空的、只含卡片,官方不缓存这类内容先查配置;对空注释别指望被缓存
热门视频每隔 6 小时还是回源 YouTube这是 TTL 按设计工作,不是故障接受它;坚持要改就动源码重编译
个别大静态文件没加速内存缓存上限只有 5MB,大文件绕过内存直接从磁盘发这是保护设计;除非实例内存宽裕且确认无压力,否则别盲目调大上限

两个坑别踩:

  • 别盲目调大内存缓存上限。源码里 5MB 是保守值,调大容易,但公共服务实例的内存压力会让所有人的页面变慢。
  • 别把"没命中"当成"没缓存"。视频第一次被打开必然回源,转圈是正常的;6 小时内第二个人再打开,你才看得到缓存的效果。

选对进阶玩法:什么场景别做这些优化

  • 个人自用实例:做第 1、2 步就够了,源码别碰。
  • 流量大的公共实例:真正的杠杆在数据库和后台任务。每小时一次的清理任务在 src/invidious/jobs/clear_expired_items_job.cr;开了注释缓存后数据库写入量上升,记得盯磁盘和备份。
  • 不值得做的场景:你看的是碎片化短视频、很少重复观看,或者实例前面有 CDN 兜底——缓存带来的差异很小,保持默认即可。

结论

Invidious 缓存体系已经就位,你要做的只是打开cache_annotations、保持preload开启,就能拦掉大部分重复请求。

下一步:现在就打开实例的配置文件,把cache_annotations改为 true 并重启,然后找两个人打开同一个视频,对比第一次和第二次加载的耗时——差多少,就是缓存值多少。

【免费下载链接】invidiousInvidious is an alternative front-end to YouTube项目地址: https://gitcode.com/GitHub_Trending/in/invidious

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询