redis 通用命令详解

Redis 通用命令详解

Redis 通用命令是不区分数据类型、对所有类型的 key 都生效 的命令,

主要用于对 key 本身进行管理(查询、删除、存在性判断、设置过期等)


1. KEYS 命令

命令作用 :按照指定的匹配规则,查找并返回所有符合条件的 key。

语法格式

复制代码
KEYS pattern

支持的通配符规则:

  • *:匹配 0 个或多个任意字符
  • ?:匹配恰好 1 个任意字符
  • [abc]:匹配括号内的任意一个字符(a / b / c)

重要注意事项

Redis 是单线程模型,KEYS 命令会全量遍历所有 key

当数据库中 key 数量很大时,会长时间阻塞 Redis 主线程,导致服务无法响应其他请求。

生产环境严禁使用 ,生产环境推荐使用 SCAN 命令进行增量迭代查询,不会阻塞服务。

示例

bash 复制代码
# 先准备几个测试 key
127.0.0.1:6379> set user:1 zhangsan
OK
127.0.0.1:6379> set user:2 lisi
OK
127.0.0.1:6379> set product:100 phone
OK
127.0.0.1:6379> set age 20
OK

# 1. 查询所有 key(* 匹配所有)
127.0.0.1:6379> KEYS *
1) "user:1"
2) "user:2"
3) "product:100"
4) "age"

# 2. 查询所有以 user: 开头的 key
127.0.0.1:6379> KEYS user:*
1) "user:1"
2) "user:2"

# 3. 查询名字只有3个字符的 key(? 匹配单个字符)
127.0.0.1:6379> KEYS ???
1) "age"

2. DEL 命令

命令作用 :删除指定的一个或多个 key,不存在的 key 会被自动忽略。

语法格式

复制代码
DEL key [key ...]
  • 返回值:成功被删除的 key 的数量
  • 支持批量删除多个 key,操作是原子性的

示例

bash 复制代码
# 准备测试数据
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK


# 1. 删除单个 key
127.0.0.1:6379> DEL k1
(integer) 1   # 返回1,表示成功删除1个key

# 2. 删除多个 key(包含一个不存在的 k4)
127.0.0.1:6379> DEL k2 k3 k4
(integer) 2   # 返回2,k2、k3被删除,k4不存在被自动忽略

3. EXISTS 命令

命令作用 :判断指定的 key 是否存在,支持同时判断多个 key。

语法格式

复制代码
EXISTS key [key ...]
  • 返回值:存在的 key 的总数量;如果传入多个 key,不会要求全部存在才返回,而是统计存在的个数。

实操示例

bash 复制代码
# 准备测试数据
127.0.0.1:6379> set name tom
OK
127.0.0.1:6379> set age 18
OK

# 1. 判断单个 key 是否存在
127.0.0.1:6379> EXISTS name
(integer) 1   # 1 表示存在

# 2. 判断不存在的 key
127.0.0.1:6379> EXISTS gender
(integer) 0   # 0 表示不存在

# 3. 同时判断多个 key
127.0.0.1:6379> EXISTS name age gender
(integer) 2   # 有 2 个 key 存在(name、age),gender 不存在

4. EXPIRE 命令

命令作用 :给指定的 key 设置过期时间(单位:秒),过期时间结束后,该 key 会被 Redis 自动删除

语法格式

复制代码
EXPIRE key seconds
  • 返回值:
    设置成功返回 1
    key 不存在,或者,无法设置过期时间时,返回 0
  • 同类扩展命令:
    • PEXPIRE key milliseconds:毫秒级设置过期时间
    • EXPIREAT key timestamp:通过 Unix 时间戳(秒级)指定具体过期时间点
    • PERSIST key:移除 key 的过期时间,让 key 变为永久有效

实操示例

bash 复制代码
# 准备测试 key
127.0.0.1:6379> set code 8848
OK

# 1. 给 code 设置 60 秒的过期时间
127.0.0.1:6379> EXPIRE code 60
(integer) 1   # 设置成功

# 2. 给不存在的 key 设置过期时间
127.0.0.1:6379> EXPIRE not_exist 100
(integer) 0   # key 不存在,设置失败

# 3. 移除过期时间(让 key 永久有效)
127.0.0.1:6379> PERSIST code
(integer) 1   # 移除成功

5. TTL 命令

命令作用 :查看指定 key 的剩余过期时间 ,单位为秒。

语法格式

复制代码
TTL key

返回值有 3 种典型情况:

  • 正整数:key 剩余的有效秒数

  • -1:key 存在,但没有设置过期时间(永久有效)

  • -2:key 不存在

  • 同类扩展命令PTTL key,返回毫秒级的剩余过期时间。

实操示例

bash 复制代码
# 准备一个带过期时间的 key
127.0.0.1:6379> set token abc123
OK
127.0.0.1:6379> EXPIRE token 120
(integer) 1

# 1. 查看剩余过期时间
127.0.0.1:6379> TTL token
(integer) 115   # 还剩 115 秒过期

# 2. 查看永久有效的 key
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> TTL name
(integer) -1    # -1 表示永久有效

# 3. 查看不存在的 key
127.0.0.1:6379> TTL not_exist
(integer) -2    # -2 表示 key 不存在

补充:help 命令

命令作用 :在 redis-cli 中查看任意 Redis 命令的官方说明,包括语法、作用、引入版本、所属分组等。

语法格式

复制代码
help 命令名

实操示例

bash 复制代码
127.0.0.1:6379> help del

  DEL key [key ...]
  summary: Delete a key
  since: 1.0.0
  group: generic
相关推荐
momo0611726 分钟前
Redis新手入门 -- 学习笔记
redis·后端
吃饱了得干活9 小时前
Redisson 进阶实战:看门狗机制与分布式锁完全指南
java·redis·后端
我是苏苏10 小时前
Redis开发09:Windows系统下主从复制的配置教程
数据库·redis·缓存
写后端的胖头鱼13 小时前
【高频面试题】如何找出redis中的慢查询记录
redis·慢日志
彧azz1 天前
Redis 全面指南:从核心概念到高可用架构实战
数据库·redis·架构
香菜TTT1 天前
Redis的哨兵机制
java·数据库·redis
hweiyu001 天前
Redis命令:APPEND
redis·缓存
敲代码的嘎仔1 天前
从集群锁失效到异步领券:我用分布式锁 + Redisson + MQ 把领券接口 RT 从 200ms 压到 15ms
java·数据库·redis·分布式·缓存·ai·wpf
莫得感情 o1 天前
Redis 12 · 缓存一致性:数据库与缓存双写怎么不乱
redis·缓存
吃饱了得干活1 天前
Spring Boot + Redis 分布式锁:一个订单重复提交引发的六次迭代
java·redis·后端