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