2411rust,cargo清理缓存

原文

Cargo最近在晚间通道上取得了一个不稳定的功能(从nightly-2023-11-17开始),它可自动清理Cargo主目录中的缓存内容.

总之,请求使用晚间通道的人启用此功能,并在Cargo问题跟踪器上报告问题.要启用它,请在你的一般在~/.cargo/config.toml%USERPROFILE%\.cargo\config.toml(对窗口)的Cargo配置文件中放入以下内容:

cpp 复制代码
[unstable]
gc = true

或设置CARGO_UNSTABLE_GC=true环境变量或使用-ZgcCLI标志来为单个命令打开它.

特别希望使用不寻常的文件系统或环境的人试一下,因为实现的某些部分是相关的,在为所有人启用它前需要通过测试.

该特点是什么

Cargo主目录中,Cargo保存了可无限增长且可能会非常大(很容易达到许多GB)的各种缓存数据.社区成员已开发了管理该缓存的工具,比如cargo-cache,但cargo自身从未公开过管理它的能力.

此缓存包括:

1,如来自crates.io包依赖元数据注册表索引数据.

2,从注册表下载的压缩.crate文件.

3,rustc用来读取源码和编译依赖.crate文件的未压缩内容.

4,git依赖使用的git仓库的克隆.

新的垃集("GC")功能增加了跟踪此缓存数据,这样cargo自动或手动删除未使用的文件.它保存一个跟踪上次使用各种缓存元素时间SQLite数据库.

每次运行读写缓存数据cargo命令时,它都会使用上次使用该数据的时间戳更新数据库.

尚未包括清理目标目录.

自动清理

运行cargo时,它每天检查一次上次使用的缓存跟踪器,并确定在一段时间内是否有不用的缓存元素.如果没有,则自动删除它们.

大多数一般会执行重要工作的命令都会有它,如cargo buildcargo fetch.

默认,如果有1个月未使用,则删除可在本地重建的数据,并删除3个月必须重新下载的数据.

如果cargo离线状态,如使用--离线--frozen函数,以避免删除长时离线可能要用的项目,则禁止自动删除函数.

最初实现公开了各种配置块来控制自动清理的工作方式.但是,稳定下来时,没有公开太多的低级细节,因此在未来可能会改变.

手动清理

如果想手动从缓存删除数据,则在cargo clean gc子命令下加了几个选项.可用此子命令来正常的自动每日清理,或指定要删除的数据不同选项.

几个选项可用来指定要删除的数据期限(如--maxdownloadage=3days)或指定缓存的最大大小(如--maxdownloadsize=1GiB).

注意

启用gc功能后,只需继续使用cargo正常业务即可.可见,在cargo~/.cargo/.globalcache主目录中的SQLite数据库保存数据.

在第一次使用cargo后,它填充数据库,跟踪cargo主目录中已有的所有数据.然后,1个月后,cargo应该开始删除旧数据,3个月删除更多数据.

最终是,在这段时间后,会开始注意到主目录总体上使用的空间更少.

如果遇见问题,可禁止gc功能,cargo应该会恢复到之前的行为.

相关推荐
lanfordxb17 小时前
从 Markdown 到图片卡片:MarkCard Studio 的功能设计与官网实现记录
rust·软件工程·ai工具
yiqiefeimeng18 小时前
Rust还是Go?编程语言的未来之争
rust·go·编程语言·技术社区·未来之争
轻揉小乔 真新人1 天前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
大卫小东(Sheldon)1 天前
小鹤音形词典 新版发布了 - 离线的小鹤双拼\音形编码查询软件,支持AI多轮对话
ai·rust·xiaohe-yinxing
程序员爱钓鱼1 天前
Rust Move 详解:所有权移动与变量失效
后端·面试·rust
Ivanqhz1 天前
php7 闭包实现
开发语言·后端·rust·php
小园子的小菜1 天前
Redis 核心原理深度解析:从数据结构、IO 模型到持久化机制
数据库·redis·缓存
BullSmall2 天前
Another Redis Desktop Manager(ARDM)下载指南
数据库·redis·缓存
nvd112 天前
ArgoCD 双层轮询深入拆解:从 redis-app.yaml 注册到缓存重建的完整链路
redis·缓存·argocd
xiaoxiangsiyan2 天前
LNMP + Redis Sentinel 高可用架构部署手册(续)
运维·网络·数据库·redis·缓存·架构·sentinel