Redis 通用命令

一、前言:为什么需要掌握"通用命令"?

Redis 提供了丰富的数据结构(String、Hash、List 等),每种都有专属命令。

但无论你操作哪种类型,都离不开一组跨类型的"通用命令"

这些命令能帮你:

  • 快速查看 key 是否存在
  • 查询 key 的过期时间
  • 删除或重命名 key
  • 清空整个数据库
  • 获取 key 的数据类型

掌握通用命令,是高效使用 Redis 的基础!

本文将为你系统梳理 10 个最常用的 Redis 通用命令,附带使用场景与避坑指南。


二、什么是"通用命令"?

通用命令(Generic Commands) 是指适用于所有 Redis 数据类型的操作命令,它们不关心 value 的具体结构,只作用于 key 本身。

无论你的 key 存的是字符串、哈希表还是有序集合,以下命令都能用!


三、十大核心通用命令详解

1️⃣ KEYS pattern ------ 模糊查询 key(慎用!)

bash 复制代码
KEYS user:*          # 查找所有以 "user:" 开头的 key
KEYS *order*         # 包含 "order" 的 key
  • 作用:按通配符查找 key
  • 通配符
    • *:任意字符(如 user:*
    • ?:单个字符(如 user:1? → user:10, user:11)
    • [abc]:匹配括号内任一字符

⚠️ 严重警告
生产环境禁止使用 KEYS

它会遍历整个键空间 ,导致 Redis 阻塞(O(N) 时间复杂度)。

替代方案:使用 SCAN 命令(非阻塞迭代)。


2️⃣ EXISTS key [key ...] ------ 判断 key 是否存在

bash 复制代码
EXISTS user:1001        # 返回 1(存在)或 0(不存在)
EXISTS user:1001 order:2001  # 支持多个 key,返回存在的数量
  • 用途:避免对不存在的 key 执行无效操作
  • 性能:O(1),非常高效

推荐用法:在业务逻辑前先判断 key 是否存在


3️⃣ DEL key [key ...] ------ 删除一个或多个 key

bash 复制代码
DEL user:1001
DEL user:1001 user:1002 order:2001
  • 返回值:成功删除的 key 数量
  • 注意:删除大 key(如百万元素的 List)会阻塞主线程!

💡 大 key 删除建议 :使用 UNLINK(异步删除,Redis 4.0+)


4️⃣ TYPE key ------ 查看 key 的数据类型

bash 复制代码
TYPE user:1001
# 返回:string / hash / list / set / zset / stream 等
  • 用途
    • 调试时确认 key 类型
    • 避免对错误类型执行命令(如对 String 执行 HGET

实用技巧 :结合 EXISTS 使用,确保 key 存在且类型正确


5️⃣ TTL key / PTTL key ------ 查询剩余生存时间

bash 复制代码
TTL user:token:abc    # 返回剩余秒数(-1=永不过期,-2=key不存在)
PTTL user:token:abc   # 返回剩余毫秒数
  • 典型场景
    • 缓存预热
    • 动态调整过期策略
    • 监控 session 有效期

🔍 注意 :未设置过期时间的 key,TTL 返回 -1


6️⃣ EXPIRE key seconds / PEXPIRE key milliseconds ------ 设置过期时间

bash 复制代码
EXPIRE user:1001 3600     # 1 小时后过期
PEXPIRE order:2001 5000   # 5 秒后过期(毫秒)
  • 用途:实现缓存自动失效、临时锁、验证码有效期等
  • 返回值:1(设置成功)或 0(key 不存在)

💡 高级用法SET key value EX 60 可在设值时直接指定过期时间


7️⃣ RENAME key newkey / RENAMENX key newkey ------ 重命名 key

bash 复制代码
RENAME old_key new_key          # 直接重命名(会覆盖 new_key)
RENAMENX old_key new_key        # 仅当 new_key 不存在时重命名
  • 注意RENAME 是原子操作
  • 风险:可能意外覆盖已有 key

安全建议 :优先使用 RENAMENX


8️⃣ FLUSHDB / FLUSHALL ------ 清空数据库(极度危险!)

bash 复制代码
FLUSHDB     # 清空当前数据库(默认 db0)
FLUSHALL    # 清空所有数据库(db0 ~ db15)
  • 用途:本地开发环境重置数据
  • ⚠️ 生产环境绝对禁止!

🔐 安全建议

  • redis.conf 中重命名或禁用:

    bash 复制代码
    KEYS user:*          # 查找所有以 "user:" 开头的 key
    KEYS *order*         # 包含 "order" 的 key

9️⃣ SELECT index ------ 切换数据库(不推荐用于生产)

bash 复制代码
>   rename-command FLUSHALL ""
>   rename-command FLUSHDB ""
>   
  • 说明 :Redis 默认提供 16 个逻辑数据库(0~15)
  • 问题
    • 无法跨库操作(如 MOVE 性能差)
    • 集群模式不支持多 DB
  • 最佳实践始终使用 db0 ,通过 key 命名空间隔离(如 user:1001, order:2001

🔟 RANDOMKEY ------ 随机返回一个 key

bash 复制代码
SELECT 0    # 使用 db0(默认)
SELECT 1    # 切换到 db1
  • 用途
    • 抽样调试
    • 数据分析(配合 TYPETTL
  • 注意 :如果数据库为空,返回 (nil)

四、通用命令使用场景总结

场景 推荐命令
调试 key 是否存在 EXISTS + TYPE
查看过期时间 TTL / PTTL
安全删除 DEL(小 key)或 UNLINK(大 key)
本地开发清数据 FLUSHDB(仅限本地!)
缓存自动失效 EXPIRESET key value EX N
避免全量扫描 SCAN 替代 KEYS

五、避坑指南:通用命令的常见误区

❌ 误区 1:在生产环境使用 KEYS *

后果 :Redis 主线程阻塞,服务雪崩!
正解 :使用 SCAN 命令分批迭代。

❌ 误区 2:频繁调用 TYPE 判断类型再操作

问题 :增加一次网络往返
正解:代码中明确 key 的类型,避免运行时判断。

❌ 误区 3:依赖多数据库(db1, db2...)

问题 :集群模式不支持,增加运维复杂度
正解:统一使用 db0,用 key 前缀区分业务。


六、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

相关推荐
IT界的老黄牛2 小时前
【IT老齐230 笔记 + 思考】金融业容灾方案“两地三中心“是什么意思?
数据库·笔记·架构
aiAIman2 小时前
OpenClaw 用户必修课:(三)Claude Code 单一聊天原则、Hooks 与 LSP
数据库·人工智能·开源·aigc
oradh2 小时前
Oracle单库环境下计划内启停数据库的步骤
数据库·oracle
DolphinDB智臾科技2 小时前
2026 工业时序数据库选型指南:抽象复用能力如何降低 80% 开发成本——DolphinDB vs InfluxDB/TimescaleDB 深度对比与实践
数据库·物联网·时序数据库·dolphindb
xcLeigh2 小时前
KWDB 跨界实战:当“时序数据库”遇上“草莓大棚”,数据如何指导种地?
数据库·物联网·智慧农业·时序数据库·农业·自动控制·kwdb
xuboyok22 小时前
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
android·数据库·mysql
倔强的石头1062 小时前
MySQL 兼容性深度解析:从内核级优化到“零修改”迁移工程实践
数据库·mysql·adb·kingbase
V1ncent Chen2 小时前
从零学SQL 03 Windows环境安装MySQL(图文版)
数据库·windows·sql·mysql·数据分析
todoitbo2 小时前
时序数据库选型指南(实战版):少踩坑,能上线,跑得久
数据库·时序数据库·iotdb