Redis 基本命令与操作全面解析:从入门到实战

发布于:2025-05-14 ⋅ 阅读:(10) ⋅ 点赞:(0)

前言

Redis 作为高性能内存数据库,其丰富的命令体系是发挥强大功能的基础。掌握 Redis 的基本命令,不仅能实现数据的高效读写,还能深入理解其内存模型与工作机制。本文将系统梳理 Redis 的核心命令,涵盖连接操作、键管理、数据类型操作、服务器管理等模块,结合详细代码示例与应用场景,帮助开发者快速掌握 Redis 的基础操作。


一、连接与基础配置命令

1. 客户端连接与认证

(1)启动 Redis 客户端

# 本地连接(默认端口6379)
redis-cli

# 远程连接(指定IP和端口)
redis-cli -h 192.168.1.100 -p 6379

(2)密码认证(若配置了 requirepass)

127.0.0.1:6379> AUTH your_password
OK  # 认证成功

(3)测试连接可用性

127.0.0.1:6379> PING
PONG  # 连接正常

2. 服务器信息查询

# 获取服务器基础信息(版本、内存、客户端等)
127.0.0.1:6379> INFO
# 输出包含大量信息,可通过INFO <section>指定模块,如:
127.0.0.1:6379> INFO SERVER  # 仅服务器配置
127.0.0.1:6379> INFO MEMORY  # 仅内存统计

二、键(Key)操作命令

1. 键的查询与判断

(1)模糊查询键(谨慎在生产环境使用)

# 匹配所有以"user:"开头的键
127.0.0.1:6379> KEYS user:*
1) "user:1001"
2) "user:1002"

# 通配符说明:
# * 匹配任意字符(0或多个)
# ? 匹配单个字符
# [abc] 匹配a、b、c中的任意一个

(2)判断键是否存在

127.0.0.1:6379> EXISTS user:1001
(integer) 1  # 存在返回1,不存在返回0

2. 键的生命周期管理

(1)设置过期时间(单位:秒)

# 为键设置10分钟过期(600秒)
127.0.0.1:6379> SET cache:data "value"
OK
127.0.0.1:6379> EXPIRE cache:data 600
(integer) 1  # 设置成功

(2)查看剩余过期时间

127.0.0.1:6379> TTL cache:data
(integer) 595  # 剩余秒数,-1表示永久有效,-2表示键不存在

(3)移除过期时间(转为永久有效)

127.0.0.1:6379> PERSIST cache:data
(integer) 1  # 移除成功

3. 键的删除与重命名

# 删除单个键(返回1表示成功,0表示键不存在)
127.0.0.1:6379> DEL user:1003
(integer) 1

# 批量删除键(支持通配符,需配合UNLINK避免阻塞)
127.0.0.1:6379> DEL user:1001 user:1002
(integer) 2

# 重命名键(若目标键存在则覆盖)
127.0.0.1:6379> RENAME old_key new_key
OK

# 安全重命名(仅当目标键不存在时执行)
127.0.0.1:6379> RENAMENX old_key new_key
(integer) 1  # 成功则返回1,失败返回0

三、基础数据类型操作命令

1. String(字符串):最简单的键值对

(1)基础读写

# 设置值(覆盖已有值,NXX表示仅键不存在时设置,EX设置过期时间)
127.0.0.1:6379> SET key "value" NX EX 60
OK

# 获取值(键不存在时返回nil)
127.0.0.1:6379> GET key
"value"

# 批量设置/获取(减少网络IO)
127.0.0.1:6379> MSET k1 v1 k2 v2
OK
127.0.0.1:6379> MGET k1 k2
1) "v1"
2) "v2"

(2)数值操作(仅整数支持)

# 初始化为计数器
127.0.0.1:6379> SET counter 10
OK

# 自增1(返回新值)
127.0.0.1:6379> INCR counter
(integer) 11

# 按步长增减(支持负数)
127.0.0.1:6379> INCRBY counter 5  # 增加5,结果16
127.0.0.1:6379> DECRBY counter 3  # 减少3,结果13

2. List(列表):有序可重复的链表

(1)元素插入(头部 / 尾部)

# 左插入(头部添加,返回新长度)
127.0.0.1:6379> LPUSH list "b" "a"  # 结果:["a", "b"]
(integer) 2

# 右插入(尾部添加)
127.0.0.1:6379> RPUSH list "c"     # 结果:["a", "b", "c"]
(integer) 3

(2)元素获取与删除

# 获取指定范围元素(0开始,-1表示最后一个)
127.0.0.1:6379> LRANGE list 0 -1
1) "a"
2) "b"
3) "c"

# 左弹出/右弹出(删除并返回元素)
127.0.0.1:6379> LPOP list  # 返回"a",剩余["b", "c"]
127.0.0.1:6379> RPOP list  # 返回"c",剩余["b"]

3. Set(集合):无序唯一的哈希集合

(1)元素操作

# 添加元素(自动去重,返回新增数量)
127.0.0.1:6379> SADD set "a" "b" "a"
(integer) 2  # 实际新增2个元素

# 判断元素是否存在
127.0.0.1:6379> SISMEMBER set "a"
(integer) 1  # 存在返回1,不存在返回0

(2)集合运算

# 创建两个集合
127.0.0.1:6379> SADD set1 "a" "b"
127.0.0.1:6379> SADD set2 "b" "c"

# 并集(所有元素)
127.0.0.1:6379> SUNION set1 set2
1) "a"
2) "b"
3) "c"

# 交集(共同元素)
127.0.0.1:6379> SINTER set1 set2
1) "b"

4. Hash(哈希):结构化数据存储

(1)字段操作

# 单个字段设置/获取
127.0.0.1:6379> HSET user id 1 name "Bob"
(integer) 2  # 成功设置2个字段
127.0.0.1:6379> HGET user name
"Bob"

# 批量操作
127.0.0.1:6379> HMSET user age 30 email "bob@example.com"
OK
127.0.0.1:6379> HMGET user name email
1) "Bob"
2) "bob@example.com"

5. Sorted Set(有序集合):带分数的排序集合

(1)元素插入与排序查询

# 添加元素(score为排序依据)
127.0.0.1:6379> ZADD scores 85 "Alice" 90 "Bob"
(integer) 2

# 按分数升序获取前2名(含分数)
127.0.0.1:6379> ZRANGE scores 0 1 WITHSCORES
1) "Alice"
2) "85"
3) "Bob"
4) "90"

# 按分数降序获取(ZREVRANGE)
127.0.0.1:6379> ZREVRANGE scores 0 1 WITHSCORES
1) "Bob"
2) "90"
3) "Alice"
4) "85"

四、服务器与数据库管理命令

1. 数据库操作

# 查看当前数据库键的数量
127.0.0.1:6379> DBSIZE
(integer) 10

# 切换数据库(默认16个数据库,编号0-15)
127.0.0.1:6379> SELECT 1
OK

# 清空当前数据库(谨慎!)
127.0.0.1:6379> FLUSHDB
OK

# 清空所有数据库(危险!)
127.0.0.1:6379> FLUSHALL
OK

2. 持久化控制

# 同步保存数据到磁盘(阻塞主线程,慎用)
127.0.0.1:6379> SAVE
OK

# 异步保存(推荐,不阻塞)
127.0.0.1:6379> BGSAVE
Background saving started

3. 客户端管理

# 查看所有连接的客户端
127.0.0.1:6379> CLIENT LIST
id=1 addr=127.0.0.1:52345 fd=6 ...  # 显示客户端详细信息

# 关闭指定客户端连接(根据id)
127.0.0.1:6379> CLIENT KILL addr:127.0.0.1:52345

五、进阶操作技巧

1. 原子性操作

Redis 的所有命令都是原子性的,支持通过MULTI+EXEC实现事务:

127.0.0.1:6379> MULTI  # 开启事务
OK
127.0.0.1:6379> INCR counter
QUEUED
127.0.0.1:6379> EXEC  # 执行所有入队命令
1) (integer) 14

2. 管道(Pipeline)优化

通过管道一次性发送多条命令,减少网络 IO 开销:

# 伪代码(Java示例)
try (Jedis jedis = new Jedis("localhost")) {
    Pipeline pipeline = jedis.pipelined();
    for (int i = 0; i < 1000; i++) {
        pipeline.set("key:" + i, "value:" + i);
    }
    pipeline.sync();  // 批量执行
}

六、命令对比与最佳实践

功能分类 核心命令 注意事项
连接与认证 redis-cli, AUTH, PING, INFO 生产环境禁用 KEYS 命令,改用 SCAN 避免阻塞
键操作 KEYS, EXISTS, DEL, EXPIRE, TTL TTL 返回 - 2 表示键不存在,-1 表示永久有效
String 操作 SET, GET, INCR, APPEND SET 支持 NXX/EX/NX 等参数实现原子锁
List 操作 LPUSH, RPOP, LRANGE 大数据量时避免 LRANGE 0 -1,改用分页或 SCAN
Set 操作 SADD, SMEMBERS, SUNION 集合运算结果可能占用大量内存,避免在生产环境直接返回全量数据
Hash 操作 HSET, HGETALL, HDEL 字段数较多时使用 HGETALL 可能导致性能问题,建议按需获取字段
服务器管理 FLUSHDB, BGSAVE, CLIENT LIST FLUSHALL 会清空所有数据库,操作前务必确认

结语

Redis 的基本命令是掌握其核心功能的钥匙,从简单的键值读写到复杂的数据结构操作,每个命令都承载着特定的业务语义。开发者需根据场景选择合适的命令组合,同时注意生产环境中的性能与安全问题(如避免阻塞命令、合理设置过期时间)。通过不断实践与总结,可充分发挥 Redis 在缓存、队列、实时统计等场景中的优势,构建高效稳定的分布式系统。

希望本文能成为你学习 Redis 的实用手册,后续可深入研究 Redis 的高级特性(如持久化策略、集群部署、事务机制),进一步提升技术能力。


网站公告

今日签到

点亮在社区的每一天
去签到