首页/数据/数据库速查/RANDOMKEY 随机抽键
Redis 命令96 条

RANDOMKEY 随机抽键

随机返回一个键名(不删除),空库返回 nil;可做键空间抽样巡检,但不适合统计用途(分布不均)。

数据库速查数据更新于 2026-10-13

RANDOMKEY 是什么

RANDOMKEY 从当前库中随机返回一个键名,不删除键,复杂度 O(1);库为空时返回 nil。它适合做键空间抽样巡检,比如随机取一批键检查是否有异常值、异常长度或缺少预期 TTL。要注意它是「随机取一个存在的键」,不是「均匀抽样分布」:不同数据结构的分布并不均等,用它统计键数量或推断数据分布都会得到偏差结论。

基本信息

语法RANDOMKEY
返回随机键名;库为空时返回 nil
复杂度O(1)
适用库当前选中库(SELECT 决定)
不适用统计键数量、推断分布、随机取有内容的业务键

典型使用场景

  • 键空间抽样:随机取若干键检查值与 TTL 是否符合规范
  • 异常值排查:抽样检查是否有超长字符串或异常编码的键
  • 容量评估辅助:结合 TTL 与类型统计抽样结果估算整体情况
  • 临时验证:确认写入的数据是否真的落在预期的库中
  • 演练与演示:需要演示键结构时快速取一个样本

抽样与巡检

抽样与巡检
SET a 1
SET b 2
SET c 3
RANDOMKEY            # 随机返回其中一个键名,不删除键
# 抽样巡检:连续取 100 次,去重后逐个检查类型与 TTL
for i in $(seq 1 100); do redis-cli RANDOMKEY; done | sort -u | head -20
# 对抽到的键做进一步检查(示例)
redis-cli TYPE a
redis-cli TTL a
redis-cli MEMORY USAGE a

用途判断

需求是否适用替代方案
随机取一个键名适用—
统计键数量不适用DBSIZE(当前库)或 INFO keyspace(各库)
随机取业务有效键不可靠维护候选键集合或使用 ZSet 抽样
扫描全部键不适用SCAN 游标分批遍历
检查分布均匀性不适用按业务维度自行统计
抽样数量要足够:单次调用只给一个键,用脚本循环取几十到上百次并去重,才有参考意义。抽样结果只能作为线索,不能当结论。
RANDOMKEY 只作用于当前库,做集群级巡检需要对每个分片分别执行;结果里出现意外键名时,先确认自己连的实例与库是否正确。

易错点

  • 用 RANDOMKEY 统计键数量:可能重复也可能长期取不到某些键,统计结果毫无意义,应改用 DBSIZE
  • 把抽样结果当全量结论:抽样只能发现线索,用它断定「所有键都没有问题」会漏掉真实故障
  • 期望它返回「有业务内容的键」:键空间包含各种辅助键与临时键,用随机键驱动业务逻辑不可靠
  • 对空库调用后不处理 nil:脚本里缺少空值判断会写出空键名导致后续命令报错
  • 在集群上只对一个分片执行:抽样覆盖面不足,巡检脚本要遍历所有主节点

数据来源与参考

  • Redis 官方文档: RANDOMKEY

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌