9个不稳定版本
0.5.4 | 2023年4月21日 |
---|---|
0.5.3 | 2023年4月21日 |
0.5.2 | 2022年9月30日 |
0.5.1 | 2021年7月6日 |
0.1.0 | 2020年12月8日 |
在数据库接口中排名174
43KB
800 行
redis-keyspace-stats
此程序分析您的Redis键空间并返回其统计信息。它具有一定的灵活性。通常,您会提供glob风格的模式,将键分组到不同的类别中。
此工具处于开发中,一些显然有用的功能尚未实现。
采样模式
统计信息
输出格式
- ✅ 到STDOUT的摘要美观打印表格
- 🚧 摘要CSV/TSV
- 🚧 摘要HTML
- 🚧 原始数据CSV/TSV
Redis支持
⚠️ 警告
- 这不是(尚未)生产级软件。使用风险自负。
- Redis是单线程的,因此在忙碌的生产系统上运行时要小心。此工具以批处理形式向Redis发送命令(并在它们之间暂停),以减少其影响,但仍需谨慎。在运行更全面的分析之前,从默认的
-n 100
小样本量开始。 - 小心使用
--sample=all
模式;-n
选项将被忽略,并且所有键都将使用SCAN
枚举 - 此工具提取密钥,并在其输出中包含其中一些。虽然很少将敏感信息存储在Redis密钥中,但仍有必要注意。值永远不会被检索或包含在任何输出中。
- 随着更多采样模式和其它功能的添加,CLI的标志/选项/组织等将发生变化
安装
目前,此工具没有发布二进制文件。
- 请确保已安装Rust,或通过rustup获取
- 运行
cargo install redis-keyspace-stats
来下载和编译二进制文件
使用示例
使用-h
(或更详尽的--help
)调用CLI将打印文档
$ redis-keyspace-stats -h
Usage: redis-keyspace-stats [OPTIONS] [PATTERNS]...
Arguments:
[PATTERNS]... Glob-style patterns to group keys together
Options:
--sample <SAMPLE_MODE> [default: random] [possible values: all, random]
-n, --samples <N_SAMPLES> Ignored when --sample=all is specified [default: 100]
--batch-size <BATCH_SIZE> [default: 100]
--batch-sleep-ms <BATCH_SLEEP_MS> [default: 100]
--stats <STATS> [default: memory,ttl] [possible values: memory, ttl, type]
-o, --out <OUTPUT_MODE> [default: table] [possible values: table]
--url <URL> [default: redis://127.0.0.1]
-h, --help Print help
-V, --version Print version
让我们获取一些快速内存+ TTL统计信息,采样50个密钥
$ redis-keyspace-stats --url $REDIS_URL -n 50
Sampled 50 of 128 keys in db0
┌─────────┬────────────────┬────────────────────┬────────────────────────┬─────────────────┐
│ Pattern │ Keys │ Example keys │ Memory │ TTL │
├─────────┼────────────────┼────────────────────┼────────────────────────┼─────────────────┤
│ * │ 50 counted │ company:121#memes │ 360.77 kB (sum) │ 54.00% have TTL │
│ │ 128 est. total │ user:79#memes │ 923.57 kB (est. total) │ 2m 47s (p50) │
│ │ │ user:8#memes │ 7.75 kB (p50) │ 3m 57s (p90) │
│ │ │ user:92#friends │ 11.9 kB (p90) │ 4m 13s (p99) │
│ │ │ company:84#friends │ 12.87 kB (p99) │ │
└─────────┴────────────────┴────────────────────┴────────────────────────┴─────────────────┘
使用“示例密钥”列中显示的内容,让我们编写一些glob-style模式来对密钥进行分组
$ redis-keyspace-stats --url $REDIS_URL -n 50 'user:*#messages' 'user:?#*' 'company:*'
Sampled 50 of 128 keys in db0
┌─────────────────┬───────────────┬────────────────────┬────────────────────────┬──────────────────┐
│ Pattern │ Keys │ Example keys │ Memory │ TTL │
├─────────────────┼───────────────┼────────────────────┼────────────────────────┼──────────────────┤
│ user:*#messages │ 8 counted │ user:27#messages │ 30.27 kB (sum) │ 37.50% have TTL │
│ │ 20 est. total │ user:34#messages │ 77.5 kB (est. total) │ 1m 30s (p50) │
│ │ │ user:13#messages │ 3.4 kB (p50) │ 3m 25s (p90) │
│ │ │ user:58#messages │ 6.22 kB (p90) │ 3m 51s (p99) │
│ │ │ user:60#messages │ 6.22 kB (p99) │ │
├─────────────────┼───────────────┼────────────────────┼────────────────────────┼──────────────────┤
│ user:?#* │ 2 counted │ user:3#friends │ 1.25 kB (sum) │ 100.00% have TTL │
│ │ 5 est. total │ user:8#memes │ 3.19 kB (est. total) │ 1m 52s (p50) │
│ │ │ │ 624 B (p50) │ 2m 39s (p90) │
│ │ │ │ 822.4 B (p90) │ 2m 50s (p99) │
│ │ │ │ 867.04 B (p99) │ │
├─────────────────┼───────────────┼────────────────────┼────────────────────────┼──────────────────┤
│ company:* │ 24 counted │ company:1#messages │ 162.13 kB (sum) │ 45.83% have TTL │
│ │ 61 est. total │ company:75#memes │ 415.05 kB (est. total) │ 2m 51s (p50) │
│ │ │ company:10#friends │ 7.24 kB (p50) │ 3m 58s (p90) │
│ │ │ company:69#memes │ 11.85 kB (p90) │ 4m 2s (p99) │
│ │ │ company:6#memes │ 12.64 kB (p99) │ │
├─────────────────┼───────────────┼────────────────────┼────────────────────────┼──────────────────┤
│ * │ 16 counted │ user:123#memes │ 149.02 kB (sum) │ 31.25% have TTL │
│ │ 41 est. total │ user:71#friends │ 381.5 kB (est. total) │ 2m 10s (p50) │
│ │ │ user:25#friends │ 10.05 kB (p50) │ 2m 59s (p90) │
│ │ │ user:86#memes │ 12.86 kB (p90) │ 3m 4s (p99) │
│ │ │ user:110#friends │ 13.29 kB (p99) │ │
└─────────────────┴───────────────┴────────────────────┴────────────────────────┴──────────────────┘
请注意,第一个匹配密钥的模式将决定分组。
开发
本地测试
- 通过环境变量设置一些虚假测试数据:
RKS_SEED_FAKE_DATA=true cargo run -- --sample=all 'company:*'
- 启动
redis-cli
二进制文件并运行monitor
对调试很有用
发布
- 在
Cargo.toml
中提高version
- 运行
cargo test
- 提交,为发布添加git标签,并推送
- 运行
cargo publish
依赖关系
~15–26MB
~476K SLoC