Redis Key 操作完整文档(含层级Key/Hash Key场景)
本文档整理了从「可视化工具层级展示」到「命令行实际操作」的全流程,解决 Key 找不到、层级不理解等问题。
bash
请注意:本文介绍Redis 版本3.0的操作,其中MEMORY USAGE 需要4.0
bash
127.0.0.1:6379> INFO server
# Server
redis_version:3.2.100
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dd26f1f93c5130ee
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:WinSock_IOCP
process_id:27452
run_id:9a995fc591cdb0e51ab98fe20aba7b3c8cc22b2e
tcp_port:6379
uptime_in_seconds:7519
uptime_in_days:0
hz:10
lru_clock:2707336
executable:D:\Oracle\redis-x64-3.2.100\redis-server.exe
config_file:D:\Oracle\redis-x64-3.2.100\redis.windows.conf
一、核心概念说明
- Redis 无真正"文件夹" :可视化工具中的文件夹/层级,本质是通过冒号
:或其他分隔符实现的 Key 命名约定(如APP_SEQUENCE:DECL:BDR:26:INLTKT),在 Redis 中是一个完整的字符串 Key。 - Hash 类型特殊场景 :部分工具会将 Hash 类型的主 Key 显示为"文件夹",其内部字段(field)会被当作子项展示(如
BWH是主 Key,STOCK_RUNNING_BALANCE是其字段)。 - Key 大小写与分隔符敏感 :Redis Key 严格区分大小写,分隔符(如
:)是 Key 的一部分,不可省略或修改。
二、通用前置操作(命令行连接与基础检查)
1. 连接 Redis 实例
bash
# 基础连接(无密码,默认端口6379)
redis-cli -h 127.0.0.1 -p 6379
# 带密码连接(推荐安全写法,先登录再输入密码)
redis-cli -h <Redis_IP> -p <端口>
AUTH <你的密码>
2. 查看当前数据库数据量(快速定位目标库)
redis
# 输出所有数据库的 Key 数量,过滤空库
INFO keyspace
- 示例输出:
db0:keys=100,expires=10,avg_ttl=998877 - 说明:
keys=0表示空库,可直接跳过;仅关注keys>0的数据库。
3. 切换数据库
redis
# 切换到目标数据库(0-15,默认进入db0)
SELECT <库编号>
三、场景1:层级式字符串 Key 操作(如 APP_SEQUENCE:DECL:BDR:26:INLTKT)
这类 Key 是 Redis 原生字符串 Key,通过 : 模拟层级,可视化工具按分隔符展示为文件夹结构。
1. 模糊查找层级 Key(推荐,不阻塞Redis)
redis
# 查找以 APP_SEQUENCE 开头的所有 Key
SCAN 0 MATCH APP_SEQUENCE:* COUNT 200
# 查找包含特定片段的 Key(如 INLTKT)
SCAN 0 MATCH *INLTKT* COUNT 200
2. 检查 Key 是否存在
redis
# 直接使用完整 Key 名查询(复制工具中高亮的完整名称)
EXISTS APP_SEQUENCE:DECL:BDR:26:INLTKT
- 返回
1:Key 存在 - 返回
0:Key 不存在(需检查连接实例、数据库、Key 名是否正确)
3. 查看 Key 详情
redis
# 查看 Key 的数据类型(确认是 String/Hash/List 等)
TYPE APP_SEQUENCE:DECL:BDR:26:INLTKT
# 查看 Key 的内存占用(判断是否为大Key)
MEMORY USAGE APP_SEQUENCE:DECL:BDR:26:INLTKT
# 读取 String 类型 Key 的值
GET APP_SEQUENCE:DECL:BDR:26:INLTKT
4. 常用修改/删除操作
redis
# 修改 String 类型 Key 的值
SET APP_SEQUENCE:DECL:BDR:26:INLTKT <新值>
# 删除 Key(谨慎操作,删除后数据无法恢复)
DEL APP_SEQUENCE:DECL:BDR:26:INLTKT
四、场景2:Hash 类型 Key 操作(如 BWH 下的 STOCK_RUNNING_BALANCE)
这类场景中,BWH 是主 Key(Hash 类型),STOCK_RUNNING_BALANCE 是其内部字段(field),可视化工具会将主 Key 显示为"文件夹",字段显示为子项。
1. 检查主 Key 是否存在并确认类型
redis
# 检查主 Key 是否存在
EXISTS BWH
# 确认主 Key 类型(必须返回 hash 才适用以下命令)
TYPE BWH
2. 查看 Hash 内所有字段与值
redis
# 一次性查看 BWH 下所有字段和对应值
HGETALL BWH
-
示例输出:
1) "STOCK_RUNNING_BALANCE" 2) "489"
3. 单独操作特定字段
redis
# 读取指定字段的值
HGET BWH STOCK_RUNNING_BALANCE
# 修改指定字段的值(如将库存改为500)
HSET BWH STOCK_RUNNING_BALANCE 500
# 删除指定字段
HDEL BWH STOCK_RUNNING_BALANCE
# 查看 Hash 内字段总数
HLEN BWH
4. 删除主 Key(谨慎操作,会清空所有字段)
redis
DEL BWH
五、常见问题排查指南
1. 命令行查不到 Key,但可视化工具能看到
- 排查方向1:连接实例错误 。确认命令行连接的 IP/端口与可视化工具一致(工具连接的可能是远程 Redis,而非本地
127.0.0.1)。 - 排查方向2:数据库选错 。通过
INFO keyspace找到有数据的库,再切换查询。 - 排查方向3:Key 名不完整 。Key 可能是层级式(含
:)或 Hash 类型字段,需使用完整 Key 名或 Hash 命令操作。
2. Key 大小写/分隔符问题
- Redis Key 严格区分大小写,分隔符
:是 Key 的一部分,不可省略。 - 建议直接从可视化工具复制 Key 名到命令行,避免手动输入错误。
3. 数据已被清空/过期
- 若 Key 是临时数据或设置了过期时间(TTL),重启 Redis 或过期后会自动消失,可在可视化工具中刷新确认。
六、操作注意事项
- 生产环境慎用 KEYS 命令 :
KEYS *会遍历全库,阻塞 Redis 服务,推荐使用SCAN命令模糊查询。 - 删除/修改操作需谨慎 :
DEL、HDEL等命令会直接删除数据,执行前需确认 Key/字段名称正确。 - 优先使用完整 Key 名操作:避免因层级、分隔符问题导致操作对象错误。
一、SCAN 分页规则
SCAN 是游标迭代查询,不会一次性返回全量数据:
- 首次执行:
SCAN 0 MATCH 前缀 COUNT 数量 - 命令第一列返回新游标,用这个新游标继续下一轮查询
- 直到返回游标为
0,代表全部遍历完成
二、实操分步示例(以 APP_SEQUENCE:* 为例)
第1轮(初始游标 0)
redis
SCAN 0 MATCH APP_SEQUENCE:* COUNT 200
示例返回:
1) "456" # 下一轮要用的游标
2) 1) "APP_SEQUENCE:DECL:BDR:26:INLTKT"
2) "APP_SEQUENCE:XXX:XXX"
...(一批数据)
第2轮(使用上一轮返回的游标 456)
redis
SCAN 456 MATCH APP_SEQUENCE:* COUNT 200
再次拿到新游标 + 第二批数据。
循环执行
每一轮都把上一轮输出的第一个字符串当作新游标 ,替换命令里的 0,反复执行。
结束标志
当返回结果第一列为 0:
1) "0"
2) ...
👉 遍历结束,所有匹配的 Key 已查询完毕。
三、补充说明
-
COUNT 200只是参考值
Redis 不保证每次一定返回 200 条,只是建议遍历条数,不影响迭代逻辑。 -
适配你 1000 条数据场景
按COUNT 200,大概需要迭代 5~6 轮即可遍历完。 -
完整通用模板(直接套用)
redis# 第1次 SCAN 0 MATCH APP_SEQUENCE:* COUNT 200 # 第2次(把 新游标 替换成上一步返回的第一个值) SCAN 新游标 MATCH APP_SEQUENCE:* COUNT 200 # 重复执行,直到游标返回 0