Redis 是一款高性能的键值对内存数据库,广泛应用于缓存、消息队列、排行榜、实时统计等场景。无论是本地开发调试、生产环境运维,还是集群性能排查,命令行工具 redis-cli 都是最直接高效的操作方式。本文整理了 Redis 最常用的指令集,涵盖 命令行连接、字符串、哈希、列表、集合、有序集合、键管理、事务、持久化、性能监控 等高频场景,每条指令均附带实战示例,助你快速完成数据操作与故障排查。
1. 命令行连接与认证
本地连接
bash
# 连接本地默认 Redis(端口 6379,无密码)
redis-cli
连接后测试连通性
127.0.0.1:6379> PING
PONG
远程连接
bash
# 连接指定主机和端口
redis-cli -h 192.168.1.100 -p 6379
连接时直接指定密码
redis-cli -h 192.168.1.100 -p 6379 -a your_password
连接后手动认证(更安全,密码不会出现在进程列表)
redis-cli -h 192.168.1.100 -p 6379
192.168.1.100:6379> AUTH your_password
OK
指定数据库
bash
# Redis 默认 16 个数据库(索引 0-15),连接时指定
redis-cli -n 1
或在连接后切换
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]>
SSL 连接(Redis 6+)
bash
# 使用 SSL/TLS 连接(需要 Redis 服务端开启 tls-port)
redis-cli --tls -h redis.example.com -p 6380
2. 字符串操作(String)
bash
# 设置键值(键不存在则创建,存在则覆盖)
SET username "Alice"
设置键值并指定过期时间(单位:秒,常用于缓存)
SET temp_token "abc123" EX 300
仅当键不存在时才设置(分布式锁常用)
SETNX lock:order:1001 "locked"
获取值
GET username
批量设置(减少网络往返)
MSET key1 "val1" key2 "val2" key3 "val3"
批量获取
MGET key1 key2 key3
数值自增(计数器场景,如点赞数)
INCR view_count
指定步长自增
INCRBY view_count 5
数值自减
DECR stock
DECRBY stock 10
追加内容到已有值末尾
APPEND username "_admin"
获取字符串长度
STRLEN username
3. 哈希操作(Hash)
bash
# 设置哈希字段(存储对象属性,如用户信息)
HSET user:1001 name "Bob"
HSET user:1001 age 25
HSET user:1001 city "Beijing"
简写:同时设置多个字段
HMSET user:1001 name "Bob" age 25 city "Beijing"
获取单个字段
HGET user:1001 name
获取多个字段
HMGET user:1001 name age
获取所有字段和值(小对象适用,大对象慎用)
HGETALL user:1001
获取所有字段名
HKEYS user:1001
获取所有字段值
HVALS user:1001
删除指定字段
HDEL user:1001 city
判断字段是否存在
HEXISTS user:1001 name
获取字段数量
HLEN user:1001
字段值自增(如用户积分)
HINCRBY user:1001 score 10
4. 列表操作(List)
bash
# 从左侧插入(常用于最新消息队列)
LPUSH msg_queue "msg_1"
LPUSH msg_queue "msg_2"
从右侧插入(常用于任务队列)
RPUSH task_queue "task_a"
RPUSH task_queue "task_b"
查看列表范围(0 到 -1 表示全部)
LRANGE msg_queue 0 -1
查看前 10 条
LRANGE msg_queue 0 9
获取列表长度
LLEN msg_queue
从左侧弹出(消费消息)
LPOP msg_queue
从右侧弹出
RPOP task_queue
阻塞式左侧弹出(队列空时等待,避免空轮询)
BLPOP msg_queue 30
按索引获取元素
LINDEX msg_queue 0
删除指定元素(count=0 删除全部,count>0 从左删,count<0 从右删)
LREM msg_queue 0 "msg_1"
截取保留指定范围(其余删除)
LTRIM msg_queue 0 99
5. 集合操作(Set)
bash
# 添加成员(自动去重)
SADD tags "redis"
SADD tags "mysql"
SADD tags "redis" # 重复添加无效,返回 0
查看所有成员
SMEMBERS tags
判断成员是否存在
SISMEMBER tags "redis"
获取成员数量
SCARD tags
随机获取一个成员(抽奖场景)
SRANDMEMBER tags
随机移除并返回一个成员
SPOP tags
移除指定成员
SREM tags "mysql"
交集(共同关注)
SINTER user:1001:follows user:1002:follows
并集
SUNION set_a set_b
差集
SDIFF set_a set_b
6. 有序集合操作(Sorted Set)
bash
# 添加成员并指定分数(排行榜核心数据结构)
ZADD leaderboard 100 "player_A"
ZADD leaderboard 150 "player_B"
ZADD leaderboard 120 "player_C"
按分数升序查看排名(0 到 -1 为全部)
ZRANGE leaderboard 0 -1 WITHSCORES
按分数降序查看(排行榜 Top N 常用)
ZREVRANGE leaderboard 0 9 WITHSCORES
按分数范围查询(如查询 100-200 分的玩家)
ZRANGEBYSCORE leaderboard 100 200 WITHSCORES
获取成员分数
ZSCORE leaderboard "player_A"
获取成员排名(升序,从 0 开始)
ZRANK leaderboard "player_A"
获取成员排名(降序,Top 榜常用)
ZREVRANK leaderboard "player_A"
移除成员
ZREM leaderboard "player_A"
成员分数自增(如实时更新积分)
ZINCRBY leaderboard 10 "player_B"
获取成员总数
ZCARD leaderboard
按排名范围删除(只保留前 100 名)
ZREMRANGEBYRANK leaderboard 0 -101
7. 键管理
bash
# 查看键是否存在
EXISTS username
删除键
DEL username
设置过期时间(单位:秒,到期自动删除)
EXPIRE session:abc123 3600
查看剩余过期时间(-1 表示永不过期,-2 表示已过期)
TTL session:abc123
取消过期时间(设为永久)
PERSIST session:abc123
查看键的数据类型
TYPE user:1001
重命名键
RENAME old_key new_key
模糊查询键(生产环境慎用,大数据量会阻塞)
KEYS user:*
安全遍历键(生产环境推荐,游标式分批扫描)
SCAN 0 MATCH user:* COUNT 100
SCAN 17 MATCH user:* COUNT 100
随机返回一个键
RANDOMKEY
8. 事务操作
bash
# 开启事务
MULTI
在事务中排队命令
SET balance:1001 1000
DECRBY balance:1001 100
INCRBY balance:1002 100
执行事务
EXEC
放弃事务(清空队列,不执行)
DISCARD
乐观锁:监视键,如果被其他客户端修改则事务失败
WATCH balance:1001
MULTI
DECRBY balance:1001 50
EXEC
如果 balance:1001 在 WATCH 后被修改,EXEC 返回 nil,事务不执行
取消对所有键的监视
UNWATCH
9. 持久化
bash
# 手动触发 RDB 快照保存(阻塞主进程,数据量大时慎用)
SAVE
后台异步触发 RDB 快照(推荐,不阻塞客户端)
BGSAVE
查看最后一次 RDB 成功时间(Unix 时间戳)
LASTSAVE
手动触发 AOF 重写(压缩 AOF 文件体积)
BGREWRITEAOF
查看持久化配置
CONFIG GET save
CONFIG GET appendonly
CONFIG GET appendfsync
10. 性能与监控
bash
# 查看 Redis 服务器信息(内存、CPU、连接数、命中率等)
INFO
查看内存详细信息
INFO memory
查看客户端连接列表
CLIENT LIST
关闭指定客户端连接
CLIENT KILL 192.168.1.50:52341
查看慢查询日志(排查性能瓶颈)
SLOWLOG GET 10
清空慢查询日志
SLOWLOG RESET
实时监控所有命令(生产环境慎用,性能开销大)
MONITOR
查看当前数据库键总数
DBSIZE
查看 Redis 当前配置项
CONFIG GET maxmemory
CONFIG GET maxclients
动态修改配置(重启失效,永久生效需改配置文件)
CONFIG SET maxmemory 2gb
清空当前数据库(危险操作,生产环境务必确认)
FLUSHDB
清空所有数据库(极度危险,通常禁用)
FLUSHALL
11. 常见故障排查流程
1. 连接不上 Redis
bash
# 测试网络连通性
redis-cli -h <host> -p <port> PING
检查 Redis 是否运行
ps aux | grep redis-server
检查防火墙和 bind 配置(redis.conf 中 bind 127.0.0.1 会拒绝远程连接)
若需远程访问,修改 redis.conf:bind 0.0.0.0 并重启
检查密码是否正确
redis-cli -h <host> -p <port>
AUTH wrong_password
返回:(error) ERR invalid password
2. 内存占用过高 / OOM
bash
# 查看内存使用详情
INFO memory
查看内存占用最大的键(抽样分析,找出大 Key)
redis-cli --bigkeys
查看内存碎片率
INFO memory | grep mem_fragmentation_ratio
设置内存上限并配置淘汰策略(redis.conf 或动态配置)
CONFIG SET maxmemory 4gb
CONFIG SET maxmemory-policy allkeys-lru
3. 性能变慢
bash
# 查看慢查询(默认超过 10ms 记录)
SLOWLOG GET 20
查看当前连接数是否达到上限
INFO clients
查看每秒处理的命令数
INFO stats | grep instantaneous_ops_per_sec
检查是否有阻塞命令(如 KEYS *、大量 HGETALL 大 Hash)