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
相关推荐
阿里巴巴P8资深技术专家1 小时前
Redis连接工具 —— Redis Manager
redis
小席是个热心肠4 小时前
Redis的自我学习
数据库·redis·学习
都说名字长不会被发现12 小时前
防重复提交组件:从“双击下了两单“说起
java·redis·spring·防重复提交
2602_9599609213 小时前
电商大厂Java面试实录:Spring Boot/JVM/Redis/Kafka/微服务/安全/测试全解析
java·jvm·spring boot·redis·面试题
小的~~14 小时前
面试被问懵了?为什么 Redis 单线程还能保证 Lua 脚本原子性,却偏偏选了 Lua?
redis·面试·lua
做一个AK梦1 天前
Redis 深入浅出
java·数据库·redis·缓存
ruleslol1 天前
Redis 雪崩与服务降级
数据库·redis
Java牛马1 天前
Caffeine 缓存及其应用相关总结
java·redis·缓存·caffeine·数据一致性·本地缓存
李可以量化1 天前
Redis 从了解到精通(三)上:量化交易场景下的数据备份与安全配置
redis·python·安全·qmt·ptrade
Patrick在香港1 天前
Python asyncio + aiohttp 并发抓取实战:把同步爬虫改造成 3 倍吞吐量的并发管道
redis·爬虫·python