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 前缀区分业务。


六、结语

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

相关推荐
入瘾1 小时前
etcd 显示连接失败
数据库·chrome·etcd
会飞的大可2 小时前
Redis Sentinel 高可用方案在WMS仓储管理系统的应用
redis·sentinel
本体智能2 小时前
预制指标、宽表、SQL、本体ABC:真正决定长期成本的,是一次变更会波及多少层
数据库·sql·本体神经网络·uino数据智能引擎
长安11082 小时前
数据库基础知识----数据库大观
数据库·oracle
小羊在睡觉2 小时前
Reids缓存穿透、击穿、雪崩
redis·缓存·go
瀚高PG实验室3 小时前
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
数据库·瀚高数据库
百结2144 小时前
PostgreSQL 初体验
数据库·postgresql
ward RINL4 小时前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis
bingHHB5 小时前
金蝶云星空旗舰版 × 赛狐ERP:亚马逊卖家业财一体化的最后一公里
运维·数据库·集成学习
Nontee6 小时前
Redis高可用架构解析
数据库·redis·架构