尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

mise cache path 详解:定位与理解 mise 缓存目录

mise cache path 详解:定位与理解 mise 缓存目录 mise cache path 详解定位与理解 mise 缓存目录【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/mise导读mise cache path是 mise 提供的一个只读命令用于在终端中直接打印当前生效的缓存目录绝对路径。它是排查缓存相关问题、配置 CI 缓存策略、以及理解 mise 目录体系的第一站配合mise cache clear清缓存、mise cache prune清理过期文件使用可以精确掌握并管理 mise 的磁盘缓存。本文从命令用法、源码实现、目录默认值与覆盖机制三个层面展开帮助你彻底读懂这个一行命令背后的设计。命令概览用法、别名与效果mise cache path是mise cache子命令家族的一员官方文档对它的定义如下用法mise cache path别名dir即mise cache dir等价效果只读read-only不会修改任何文件标志仅支持-h --help打印帮助信息# 查看当前缓存目录 mise cache path # 等价写法 mise cache dir # 等价写法不带子命令时mise cache 也直接打印缓存目录 mise cache从源码 src/cli/cache/mod.rs 可以看到mise cache不带任何子命令时的默认行为同样是打印缓存目录路径impl Cache { pub(crate) async fn run(self) - Result() { match self.command { Some(cmd) cmd.run().await, None { // just show the cache dir miseprintln!({}, env::MISE_CACHE_DIR.display()); Ok(()) } } } }在 src/cli/command_effects.rs 中cache path被标记为Read效果与cache taskRead并列而cache clear、cache prune则被标记为Write这从命令元数据层面再次印证了它是纯查询操作。源码实现一个命令背后的三个关键引用mise cache path的实现极其精简完整代码位于 src/cli/cache/path.rs核心逻辑只有一行#[derive(Debug, usage_rs::Args)] #[usage(verbatim_doc_comment, visible_alias dir)] pub(super) struct CachePath {} impl CachePath { pub(super) fn run(self) - Result() { miseprintln!({}, env::MISE_CACHE_DIR.display()); Ok(()) } }关键在于env::MISE_CACHE_DIR这个全局静态变量其定义位于 src/env.rspub(crate) static MISE_CACHE_DIR: LazyPathBuf Lazy::new(|| var_path(MISE_CACHE_DIR).unwrap_or_else(|| XDG_CACHE_HOME.join(mise)));这段代码揭示了解析顺序优先读取环境变量MISE_CACHE_DIR未设置时回退到$XDG_CACHE_HOME/mise在 macOS 上为~/Library/Caches/mise。整个命令不执行任何文件扫描、统计或修改只是把这一解析结果打印到标准输出因此它的输出可以直接用于脚本编程例如# 将缓存目录赋值给变量 CACHE_DIR$(mise cache path) # 配合其他命令使用 du -sh $(mise cache path)此外mise 内部有一个名为 src/dirs.rs 的目录常量模块其中CACHE直接引用了env::MISE_CACHE_DIR。也就是说全仓库所有涉及缓存的读写远程版本列表、别名缓存、插件元数据等都统一以mise cache path打印出的这个目录为根二者始终保持一致。缓存目录的默认值与覆盖机制根据 docs/directories.md 的目录总览表在未设置任何MISE_*或XDG_*覆盖变量的前提下各平台的默认缓存目录为平台默认缓存目录覆盖方式Linux~/.cache/miseMISE_CACHE_DIR否则XDG_CACHE_HOME/misemacOS~/Library/Caches/miseMISE_CACHE_DIR否则XDG_CACHE_HOME/miseWindows%TEMP%\miseMISE_CACHE_DIR否则XDG_CACHE_HOME/mise覆盖规则归纳为优先MISE_CACHE_DIR其次XDG_CACHE_HOME/mise。官方文档特别强调两点使用注意事项目录覆盖变量必须在启动 mise 的环境中设置并保持 shell、编辑器、CI 任务之间的一致性否则不同环境会使用不同的缓存目录切勿把MISE_CACHE_DIR指向包含配置或已安装工具的目录因为缓存清理mise cache clear会递归删除该目录下的内容。用mise cache path验证覆盖是否生效MISE_CACHE_DIR/tmp/my-cache mise cache path # 输出/tmp/my-cache mise cache path # 输出当前环境的实际缓存目录Linux 默认 ~/.cache/mise值得留意的是缓存目录与数据目录是严格分离的已安装的工具位于~/.local/share/mise由MISE_DATA_DIR控制而缓存仅存放版本元数据等可再生信息。因此清空缓存不会卸载任何工具。docs/directories.md中明确指出Usemise cache clearto clear metadata while no installs are in progress. This does not uninstall tools when the cache and install directories are separate.缓存目录里到底有什么mise cache path打印出的目录是工具元数据缓存的总根根据 docs/cache-behavior.md 与各后端源码其中典型内容包括远程版本列表各后端node、python、java、aqua 等拉取的工具远程版本清单通常以remote_versions.msgpack.z文件名存储默认新鲜期为 1 小时由fetch_remote_versions_cache设置控制。例如 src/plugins/core/node.rs 与 src/backend/mod.rs 都用CacheManagerBuilder::new(self.ba().cache_path.join(remote_versions.msgpack.z))构造缓存。别名与 idomatic 文件名缓存asdf 插件缓存的版本别名aliases.msgpack.z与 legacy 文件名列表idiomatic_filenames.msgpack.z见 src/backend/asdf.rs。插件 exec-env 结果缓存asdf 插件的exec-env输出被缓存以避免每次环境计算都启动 Bash见 src/backend/external_plugin_cache.rs。其他浮动的 mise registry 归档mise-registry/registry.tar.zst见 src/registry.rs、mise ls-remote相关数据、patrons 列表等。按后端BackendArg划分每个工具的缓存路径由 src/cli/args/backend_arg.rs 计算cache_path: dirs::CACHE.join(pathname), installs_path: dirs::INSTALLS.join(pathname), downloads_path: dirs::DOWNLOADS.join(pathname),因此mise cache clear node实际删除的是缓存目录/node这个子目录。注意环境缓存env_cache不在此目录下。实验性的env_cache设置会把计算出的环境缓存在状态目录的env-cache/下Linux 为~/.local/state/mise/env-cache并且是加密存储的详见 docs/cache-behavior.md。与缓存家族命令的配合使用mise cache家族共包含 4 个子命令path是其中唯一的纯查询命令命令作用效果mise cache path打印缓存目录路径只读mise cache clear删除缓存文件写mise cache prune按访问时间清理过期文件写mise cache task查看任务输出缓存只读典型排查流程# 1. 确认缓存目录位置 mise cache path # 2. 版本列表过期默认 1 小时新鲜期想立即重新拉取 mise cache clear node mise ls-remote node # 3. 预览将要被清理的过期文件默认 30 天未访问 mise cache prune --dry-run # 4. 执行清理 mise cache prunemise cache clear支持按工具名精确清理如mise cache clear node python也可以带--task build只清理指定任务的输出缓存不带参数时清空全部缓存并同时清掉环境缓存与任务产物缓存见 src/cli/cache/clear.rs。mise cache prune的默认过期时间为 30 天可通过设置项cache_prune_age或环境变量调整cache_prune_age 0s可禁用自动清理。环境缓存则使用独立的env_cache_ttl作为清理年龄见 src/cli/cache/prune.rs。每次调用约 1% 的概率触发自动修剪auto_prune见 src/cache.rs。实战场景场景一CI 缓存 key 设计。在 GitHub Actions 或 GitLab CI 中缓存工具安装目录通常收益最大但元数据缓存也能加速重复任务。CI 中可通过mise cache path获取路径配合平台与配置特征设计缓存 key。mise 的远程缓存还支持只读模式CacheRemoteMode并在受信任的 CI 推送环境下放开写权限见 src/cache.rs。场景二排查版本列表不更新。当mise ls-remote node看不到新版本时先执行mise cache clear node再查询。需要说明的是部分版本信息来自远程 versions host清本地缓存不会刷新该远程服务锁定文件或显式版本 pin 也可能让安装停留在旧版本。场景三脚本化运维。用mise cache path配合du、find等命令监控缓存占用或用MISE_CACHE_DIR/dev/shm/mise mise cache path在内存文件系统中验证覆盖是否生效。场景四Windows 长路径问题。源码注释记录了这样一个细节在 Windows 上MISE_CACHE_DIR过深可能导致下载目录超过MAX_PATH260 字符而失败此时建议将MISE_CACHE_DIR指向更短的目录见 src/backend/aqua.rs——用mise cache path可以快速确认当前路径长度。小结mise cache path虽只有一行代码但它连接着 mise 目录体系、缓存新鲜期策略与清理机制三条主线。掌握它就等于掌握了 mise 缓存管理的入口知道缓存放哪里、里面有什么、何时会被视为过期才能精准地清、精地修剪而不会误删已安装的工具或信任记录。需要更深一步时可继续阅读 docs/cache-behavior.md 了解工具缓存、环境缓存、任务缓存三类缓存的完整行为差异。【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/mise创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表