Redis 命令入门
个人技术笔记 - Redis 基础系列第一篇
什么是 Redis
Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据结构,性能极高,常用于高并发场景。
核心特点:
- 基于内存,读写速度极快
- 支持数据持久化
- 支持多种数据结构
- 支持主从复制、哨兵、集群
- 单线程模型(6.0 后引入多线程 I/O)
基础操作
连接 Redis
# 启动 Redis 服务
redis-server
# 连接到 Redis
redis-cli
# 连接到指定主机和端口
redis-cli -h 127.0.0.1 -p 6379
# 带密码连接
redis-cli -a your_password
基本命令
# 测试连接
PING # 返回 PONG
# 查看所有键
KEYS *
# 查看 Redis 信息
INFO
# 选择数据库(默认 16 个,0-15)
SELECT 1
# 清空当前数据库
FLUSHDB
# 清空所有数据库
FLUSHALL
五大基础数据类型
1. String(字符串)
最基本的数据类型,一个 key 对应一个 value。
# 设置值
SET name "张三"
SET age 25
# 获取值
GET name # "张三"
# 设置并返回旧值
GETSET name "李四" # 返回 "张三"
# 批量设置
MSET key1 "value1" key2 "value2" key3 "value3"
# 批量获取
MGET key1 key2 key3
# 设置过期时间(秒)
SETEX session:token 3600 "abc123" # 3600 秒后过期
# 仅当 key 不存在时设置
SETNX lock:user:1001 "locked" # 返回 1 表示成功,0 表示已存在
# 追加字符串
APPEND name "同学" # name 变为 "李四同学"
# 获取字符串长度
STRLEN name
# 数值操作
SET counter 10
INCR counter # 自增 1,返回 11
INCRBY counter 5 # 增加 5,返回 16
DECR counter # 自减 1,返回 15
DECRBY counter 3 # 减少 3,返回 12
应用场景: 缓存、计数器、分布式锁、Session 存储
2. Hash(哈希)
类似于 JavaScript 的对象或 Python 的字典,适合存储对象。
# 设置单个字段
HSET user:1001 name "张三"
HSET user:1001 age 25
HSET user:1001 email "zhangsan@example.com"
# 获取单个字段
HGET user:1001 name # "张三"
# 批量设置
HMSET user:1002 name "李四" age 30 city "北京"
# 批量获取
HMGET user:1002 name age city
# 获取所有字段和值
HGETALL user:1001
# 获取所有字段名
HKEYS user:1001
# 获取所有值
HVALS user:1001
# 判断字段是否存在
HEXISTS user:1001 email # 返回 1 表示存在
# 删除字段
HDEL user:1001 email
# 获取字段数量
HLEN user:1001
# 数值字段自增
HINCRBY user:1001 age 1 # age 增加 1
应用场景: 存储对象(用户信息、商品信息)、购物车
3. List(列表)
有序的字符串列表,底层是链表实现,适合队列、栈等场景。
# 从左侧插入(头部)
LPUSH tasks "task1"
LPUSH tasks "task2" "task3" # 列表:["task3", "task2", "task1"]
# 从右侧插入(尾部)
RPUSH logs "log1" "log2" "log3" # 列表:["log1", "log2", "log3"]
# 获取列表长度
LLEN tasks
# 获取指定范围元素(0 表示第一个,-1 表示最后一个)
LRANGE tasks 0 -1 # 获取所有元素
LRANGE tasks 0 1 # 获取前两个元素
# 获取指定索引元素
LINDEX tasks 0 # 获取第一个元素
# 从左侧弹出(头部)
LPOP tasks # 返回并移除 "task3"
# 从右侧弹出(尾部)
RPOP logs # 返回并移除 "log3"
# 阻塞式弹出(用于消息队列)
BLPOP tasks 10 # 等待 10 秒,如果有元素则弹出
# 修改指定索引的值
LSET tasks 0 "new_task"
# 删除指定值的元素
LREM tasks 1 "task1" # 删除 1 个值为 "task1" 的元素
# 保留指定范围的元素
LTRIM tasks 0 99 # 只保留前 100 个元素
应用场景: 消息队列、最新动态列表、评论列表
4. Set(集合)
无序的字符串集合,元素唯一,支持集合运算。
# 添加元素
SADD tags "Python" "Redis" "Docker"
SADD tags "Python" # 重复添加无效
# 获取所有元素
SMEMBERS tags
# 判断元素是否存在
SISMEMBER tags "Python" # 返回 1 表示存在
# 获取集合元素数量
SCARD tags
# 删除元素
SREM tags "Docker"
# 随机获取元素(不删除)
SRANDMEMBER tags 2 # 随机获取 2 个元素
# 随机弹出元素(删除)
SPOP tags
# 集合运算
SADD set1 "a" "b" "c"
SADD set2 "b" "c" "d"
SINTER set1 set2 # 交集:["b", "c"]
SUNION set1 set2 # 并集:["a", "b", "c", "d"]
SDIFF set1 set2 # 差集:["a"]
# 将交集结果存储到新集合
SINTERSTORE result set1 set2
应用场景: 标签系统、共同好友、抽奖系统、去重
5. Sorted Set(有序集合)
有序的集合,每个元素关联一个分数(score),按分数排序。
# 添加元素(score member)
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2" 150 "player3"
# 获取元素数量
ZCARD leaderboard
# 获取指定范围元素(按分数从小到大)
ZRANGE leaderboard 0 -1 # 获取所有元素
ZRANGE leaderboard 0 -1 WITHSCORES # 同时显示分数
# 获取指定范围元素(按分数从大到小)
ZREVRANGE leaderboard 0 2 # 获取前 3 名
# 获取元素的分数
ZSCORE leaderboard "player1"
# 获取元素的排名(从 0 开始)
ZRANK leaderboard "player1" # 正序排名
ZREVRANK leaderboard "player1" # 倒序排名
# 增加元素的分数
ZINCRBY leaderboard 50 "player1" # player1 分数增加 50
# 删除元素
ZREM leaderboard "player3"
# 按分数范围获取元素
ZRANGEBYSCORE leaderboard 100 200 # 获取分数在 100-200 之间的元素
# 按分数范围删除元素
ZREMRANGEBYSCORE leaderboard 0 100
# 按排名范围删除元素
ZREMRANGEBYRANK leaderboard 0 2 # 删除排名 0-2 的元素
# 获取指定分数范围的元素数量
ZCOUNT leaderboard 100 200
应用场景: 排行榜、优先级队列、延时队列
通用键操作
# 查看键是否存在
EXISTS name # 返回 1 表示存在
# 删除键
DEL name age
# 设置过期时间(秒)
EXPIRE session:token 3600
# 设置过期时间(毫秒)
PEXPIRE session:token 3600000
# 设置过期时间点(Unix 时间戳)
EXPIREAT session:token 1735689600
# 查看剩余过期时间(秒)
TTL session:token # 返回 -1 表示永不过期,-2 表示已过期
# 查看剩余过期时间(毫秒)
PTTL session:token
# 移除过期时间
PERSIST session:token
# 重命名键
RENAME oldkey newkey
# 查看键的数据类型
TYPE name # 返回 string、hash、list、set、zset
# 查看键的内存占用(字节)
MEMORY USAGE name
事务
Redis 事务可以一次执行多个命令,但不支持回滚。
# 开启事务
MULTI
# 执行命令(命令会进入队列)
SET account:1 100
SET account:2 200
DECRBY account:1 50
INCRBY account:2 50
# 执行事务
EXEC
# 取消事务
DISCARD
# 监视键(乐观锁)
WATCH account:1
MULTI
DECRBY account:1 50
EXEC # 如果 account:1 在 WATCH 后被修改,事务会失败
持久化
RDB(快照)
定期将内存数据保存到磁盘。
# 手动触发快照
SAVE # 阻塞式保存
BGSAVE # 后台保存
# 查看最后一次保存时间
LASTSAVE
AOF(追加文件)
记录每个写操作,重启时重新执行。
# 手动触发 AOF 重写
BGREWRITEAOF
实用技巧
1. 模糊查询键
# 查找所有以 user: 开头的键
KEYS user:*
# 查找所有包含 session 的键
KEYS *session*
# 更安全的方式(不阻塞)
SCAN 0 MATCH user:* COUNT 100
2. 批量删除键
# Linux/Mac
redis-cli KEYS "temp:*" | xargs redis-cli DEL
# Windows PowerShell
redis-cli KEYS "temp:*" | ForEach-Object { redis-cli DEL }
3. 查看慢查询
# 获取慢查询日志
SLOWLOG GET 10
# 查看慢查询日志长度
SLOWLOG LEN
# 清空慢查询日志
SLOWLOG RESET
常见应用场景总结
| 场景 | 数据类型 | 示例 |
|---|---|---|
| 缓存 | String | 用户信息、文章内容 |
| 计数器 | String | 点赞数、浏览量 |
| 分布式锁 | String | SETNX + EXPIRE |
| Session | String/Hash | 用户会话 |
| 购物车 | Hash | 商品 ID 为字段,数量为值 |
| 消息队列 | List | LPUSH + BRPOP |
| 最新动态 | List | LPUSH + LRANGE |
| 标签系统 | Set | 文章标签、用户兴趣 |
| 共同好友 | Set | SINTER |
| 排行榜 | Sorted Set | 游戏积分、热门文章 |
| 延时队列 | Sorted Set | 时间戳作为 score |
下一步学习
- Redis 高级特性(发布订阅、Lua 脚本)
- Redis 持久化深入(RDB vs AOF)
- Redis 主从复制与哨兵
- Redis 集群
- Redis 性能优化
参考资料:
最后更新:2026-01-06
评论区