【无标题】

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

一、核心概念说明

  1. Redis 无真正"文件夹" :可视化工具中的文件夹/层级,本质是通过冒号 : 或其他分隔符实现的 Key 命名约定(如 APP_SEQUENCE:DECL:BDR:26:INLTKT),在 Redis 中是一个完整的字符串 Key。
  2. Hash 类型特殊场景 :部分工具会将 Hash 类型的主 Key 显示为"文件夹",其内部字段(field)会被当作子项展示(如 BWH 是主 Key,STOCK_RUNNING_BALANCE 是其字段)。
  3. 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 或过期后会自动消失,可在可视化工具中刷新确认。

六、操作注意事项

  1. 生产环境慎用 KEYS 命令KEYS * 会遍历全库,阻塞 Redis 服务,推荐使用 SCAN 命令模糊查询。
  2. 删除/修改操作需谨慎DELHDEL 等命令会直接删除数据,执行前需确认 Key/字段名称正确。
  3. 优先使用完整 Key 名操作:避免因层级、分隔符问题导致操作对象错误。

一、SCAN 分页规则

SCAN游标迭代查询,不会一次性返回全量数据:

  1. 首次执行:SCAN 0 MATCH 前缀 COUNT 数量
  2. 命令第一列返回新游标,用这个新游标继续下一轮查询
  3. 直到返回游标为 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 已查询完毕。


三、补充说明

  1. COUNT 200 只是参考值
    Redis 不保证每次一定返回 200 条,只是建议遍历条数,不影响迭代逻辑。

  2. 适配你 1000 条数据场景
    COUNT 200,大概需要迭代 5~6 轮即可遍历完。

  3. 完整通用模板(直接套用)

    redis 复制代码
    # 第1次
    SCAN 0 MATCH APP_SEQUENCE:* COUNT 200
    
    # 第2次(把 新游标 替换成上一步返回的第一个值)
    SCAN 新游标 MATCH APP_SEQUENCE:* COUNT 200
    
    # 重复执行,直到游标返回 0

相关推荐
AOwhisky3 小时前
Redis 学习笔记(第二期):核心数据类型与消息队列实战
运维·数据库·redis·笔记·学习·云计算
呦呦鹿鸣Rzh3 小时前
Redis Lua 脚本:从入门到避坑指南
redis·junit·lua
Harvy_没救了3 小时前
【云计算】华为公有云构建高可用Redis集群
数据库·redis·云计算
Ze3G90nYt3 小时前
Redis 分布式锁进阶第一百三十一篇
数据库·redis·分布式
清晨0013 小时前
工业互联网实时数据统计一致性保障 — 基于 Redis Lua 的并发安全方案
redis·安全·lua
轻刀快马14 小时前
Redis 架构进阶:全景解析 RDB、AOF 与混合持久化机制
redis
Albert Edison18 小时前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
Steadfast_GG18 小时前
Redis中的通用命令
redis·缓存
小二·18 小时前
Redis 内存溢出(OOM)排查与恢复实战
数据库·redis·bootstrap