一、Redis 基础键(Key)操作

Redis 中所有数据都以「键值对(Key-Value)」形式存储,以下指令围绕 Key 的核心操作展开,适用于所有数据类型。

1. 核心基础:设置 Key 与查看单个 Key

设置 Key-Value:set key value [EX seconds] [PX milliseconds] [NX|XX]

  • 功能:最基础的指令,用于创建或修改一个 Key 对应的 Value(默认是字符串类型),支持可选参数扩展功能。

  • 可选参数说明

  • EX seconds:等同于 expire,直接设置过期时间(单位:秒);

  • PX milliseconds:等同于 pexpire,设置毫秒级过期时间;

  • NX:仅当 Key 不存在时才设置(避免覆盖已有值);

  • XX:仅当 Key 已存在时才修改(更新已有值)。

  • 示例

# 基础用法:创建/修改 Key(永久有效)
127.0.0.1:6379> set name "zhangsan"
OK

# 设置 Key 并指定 300 秒后过期
127.0.0.1:6379> set age 25 EX 300
OK

# 仅当 Key 不存在时设置(避免覆盖)
127.0.0.1:6379> set name "lisi" NX
(nil)  # name 已存在,设置失败

# 仅当 Key 存在时更新
127.0.0.1:6379> set name "zhangsan_update" XX
OK  # name 已存在,更新成功

查看单个 Key 的值:get key

  • 功能:获取指定 Key 对应的 Value,若 Key 不存在则返回 nil

  • 示例

127.0.0.1:6379> get name
"zhangsan_update"  # 返回 Key 对应的 Value

127.0.0.1:6379> get non_exist_key
(nil)  # Key 不存在

2. 查看所有 Key:keys *

  • 功能:列出当前数据库中所有的 Key(支持通配符,如 keys user:* 匹配所有以 user: 开头的键)。

  • 示例

127.0.0.1:6379> keys *
1) "name"
2) "age"
3) "user:1001"
  • 注意:生产环境慎用 keys *,若数据库中 Key 数量过多,会阻塞 Redis 服务(Redis 是单线程模型),建议用 scan 指令替代。

3. 删除 Key:del key [key ...]

  • 功能:删除一个或多个 Key,返回成功删除的 Key 数量。

  • 示例

127.0.0.1:6379> del name age
(integer) 2  # 成功删除 2 个 Key

4. 检查 Key 是否存在:exists key

  • 功能:判断指定 Key 是否存在,返回 1 表示存在,0 表示不存在。

  • 示例

127.0.0.1:6379> exists name
(integer) 0  # 不存在
127.0.0.1:6379> exists user:1001
(integer) 1  # 存在

5. 设置 Key 过期时间:expire key seconds

  • 功能:为 Key 设置生存时间(单位:秒),过期后 Key 会自动删除。

  • 示例

127.0.0.1:6379> expire user:1001 300  # 设置 5 分钟后过期
(integer) 1  # 设置成功
  • 扩展:若需设置毫秒级过期时间,可用 pexpire key milliseconds

6. 移除 Key 过期时间:persist key

  • 功能:取消 Key 的过期时间,让 Key 永久有效(仅对已设置过期时间的 Key 有效)。

  • 示例

127.0.0.1:6379> persist user:1001
(integer) 1  # 移除成功

7. 移动 Key 到指定数据库:move key db

  • 功能:将当前数据库的 Key 移动到指定编号的数据库(Redis 默认有 16 个数据库,编号 0~15)。

  • 示例

127.0.0.1:6379> move user:1001 1  # 移动到数据库 1
(integer) 1  # 移动成功

8. 查看 Key 剩余生存时间:ttl key / pttl key

  • ttl key:返回 Key 剩余生存时间(单位:秒),结果含义:

  • 正数:剩余秒数;

  • -1:Key 永久有效(无过期时间);

  • -2:Key 不存在或已过期。

  • pttl key:返回毫秒级剩余生存时间(精度更高)。

  • 示例

127.0.0.1:6379> ttl user:1001
(integer) 256  # 剩余 256 秒
127.0.0.1:6379> pttl user:1001
(integer) 255892  # 剩余 255892 毫秒

9. 随机返回一个 Key:randomkey

  • 功能:从当前数据库中随机返回一个存在的 Key(无需遍历所有 Key,效率高)。

  • 示例

127.0.0.1:6379> randomkey
"user:1001"

10. 修改 Key 名称:rename key newkey

  • 功能:将 Key 重命名为 newkey,若 newkey 已存在,会覆盖原 newkey 的值。

  • 示例

127.0.0.1:6379> rename user:1001 user:admin
OK
  • 安全替代:若需避免覆盖已有 Key,可用 renamenx key newkey(仅当 newkey 不存在时才重命名)。

11. 查看 Key 存储值的类型:type key

  • 功能:返回 Key 对应 Value 的数据类型(Redis 支持 string、hash、list、set、zset 等)。

  • 示例

127.0.0.1:6379> set name "zhangsan"
OK
127.0.0.1:6379> type name
string  # Value 是字符串类型

12. 切换数据库:select db

  • 功能:切换到指定编号的数据库(默认使用数据库 0)。

  • 示例

127.0.0.1:6379> select 1  # 切换到数据库 1
OK
127.0.0.1:6379[1]>  # 提示符后显示当前数据库编号

二、Redis 服务端管理指令

这类指令用于查看服务状态、配置信息,或执行服务级操作(如退出、清空数据)。

1. 测试服务连通性:ping

  • 功能:检测 Redis 服务是否正常运行,正常返回 PONG,异常返回错误信息。

  • 示例

127.0.0.1:6379> ping
PONG  # 服务正常
  • 用途:常用于心跳检测(如客户端判断服务是否可用)。

2. 退出客户端连接:quit

  • 功能:关闭当前客户端与 Redis 服务的连接(不会影响服务端运行)。

  • 示例

127.0.0.1:6379> quit
OK

3. 查看当前数据库 Key 数量:dbsize

  • 功能:返回当前数据库中 Key 的总数(效率比 keys * 高,无需遍历所有 Key)。

  • 示例

127.0.0.1:6379> dbsize
(integer) 5  # 当前数据库有 5 个 Key

4. 查看服务状态信息:info

  • 功能:返回 Redis 服务的详细信息,包括版本、内存使用、连接数、持久化状态等。

  • 常用参数

  • info:返回所有信息;

  • info server:仅查看服务基础信息(版本、启动时间等);

  • info memory:仅查看内存使用情况;

  • info stats:仅查看统计信息(如 Key 命中次数、过期数量等)。

  • 示例

127.0.0.1:6379> info server
# Server
redis_version:7.0.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:f8a9579f0e2e32d6
redis_mode:standalone
os:Linux 5.15.0-78-generic x86_64
...

5. 查看服务配置信息:config get pattern

  • 功能:获取 Redis 服务的配置参数,pattern 支持通配符(* 表示所有配置)。

  • 常用示例

127.0.0.1:6379> config get dir  # 查看 Redis 数据存储目录
1) "dir"
2) "/var/lib/redis"

127.0.0.1:6379> config get port  # 查看服务端口
1) "port"
2) "6379"

127.0.0.1:6379> config get *  # 查看所有配置(输出较多)

6. 清空当前数据库:flushdb

  • 功能:删除当前选中数据库中的所有 Key(谨慎使用!不可逆)。

  • 示例

127.0.0.1:6379> flushdb
OK  # 清空成功
127.0.0.1:6379> dbsize
(integer) 0  # 已无 Key

7. 清空所有数据库:flushall

  • 功能:删除 Redis 所有数据库(0~15)中的所有 Key(生产环境严禁随意使用!)。

  • 示例

127.0.0.1:6379> flushall
OK

三、实用技巧与注意事项

  1. 区分「当前数据库」与「所有数据库」flushdb 仅清空当前选中数据库,flushall 清空所有,操作前务必确认当前数据库(select 指令切换)。

  2. 过期时间与持久化:设置过期时间的 Key,过期后会被 Redis 自动删除(惰性删除 + 定期删除),但如果开启了持久化(RDB/AOF),过期的 Key 不会被写入持久化文件,避免数据冗余。

  3. 生产环境避坑

  • 禁用 keys *flushall,可通过 Redis 配置文件限制危险指令(如 rename-command FLUSHALL "");

  • 重要数据建议开启持久化,并定期备份;

  • 避免给高频访问的 Key 设置过短的过期时间,减少过期删除带来的性能开销。