Redis 一 基础用法
📚 Redis 核心语法笔记(精华版)
一句话心法:String 存万物,Hash 存对象,List 存队列/流,Set 存标签/去重,ZSet 存排序/排行。
一、全局通用命令(适用于所有类型)
| 命令 | 用法 | 说明(必记点) |
|---|---|---|
KEYS |
KEYS user:* |
❌ 生产禁用,会阻塞服务。 |
SCAN |
SCAN 0 MATCH user:* COUNT 100 |
✅ 推荐代替,游标迭代,不阻塞。 |
EXISTS |
EXISTS key |
检查 key 是否存在(返回 1/0)。 |
DEL |
DEL key1 key2 |
同步删除(大 key 会卡顿)。 |
UNLINK |
UNLINK big_key |
异步删除(推荐删大 key)。 |
EXPIRE |
EXPIRE key 60 |
设置过期时间(秒)。 |
TTL |
TTL key |
查看剩余时间(-1永久,-2不存在)。 |
TYPE |
TYPE key |
查看数据类型(string/hash/list…)。 |
二、五大数据类型命令速查(含易混淆点)
1. String(字符串)—— 缓存之王
场景:缓存 JSON、Session、计数器。
| 操作 | 命令 | 示例 | 注意点 |
|---|---|---|---|
| 增/改 | SET |
SET name "Tom" EX 10 |
EX 秒,PX 毫秒,NX 不存在才设。 |
| 查 | GET |
GET name |
返回 nil 表示不存在。 |
| 批量增 | MSET |
MSET a 1 b 2 |
原子操作。 Multiple SET |
| 批量查 | MGET |
MGET a b |
减少网络请求。 |
| 自增/减 | INCR / INCRBY |
INCR age |
原子操作,适合秒杀计数。 |
2. Hash(哈希)—— 对象容器
场景:存用户信息、购物车商品。
| 操作 | 命令 | 示例 | 注意点 |
|---|---|---|---|
| 增/改 | HSET |
HSET user:1 name "Jack" age 20 |
既是新增也是修改(覆盖写)。 |
| 查单个 | HGET |
HGET user:1 name |
返回指定字段。 |
| 查全部 | HGETALL |
HGETALL user:1 |
慎用,字段太多会慢。 |
| 删字段 | HDEL |
HDEL user:1 age |
删除指定字段。 |
| 计数自增 | HINCRBY |
HINCRBY user:1 age 1 |
字段值加 1。 |
3. List(列表)—— 双向链表
场景:最新消息、消息队列(阻塞队列)。
| 操作 | 命令 | 示例 | 注意点(⭐重点) |
|---|---|---|---|
| 左/右入 | LPUSH / RPUSH |
LPUSH list A B |
LPUSH 新元素在最左边(头)。 |
| 左/右出 | LPOP / RPOP |
LPOP list |
移除并返回头部元素。 |
| 查范围 | LRANGE |
LRANGE list 0 2 |
0 是头部第一个,-1 是尾部。 |
| 修剪(保留) | LTRIM |
LTRIM list 0 2 |
⭐保留 0-2,其他全删(不是删除这段!)。 |
| 阻塞弹出 | BLPOP |
BLPOP queue 5 |
没有元素时阻塞 5 秒。 |
⭐黄金组合(固定大小滑动窗口):
LPUSH+LTRIM 0 N-1
4. Set(集合)—— 去重标签
场景:抽奖去重、共同好友、用户标签。
| 操作 | 命令 | 示例 | 注意点 |
|---|---|---|---|
| 添加 | SADD |
SADD tags "tech" |
重复添加返回 0(去重)。 |
| 查看全部 | SMEMBERS |
SMEMBERS tags |
无序,返回顺序随机。 |
| 成员判断 | SISMEMBER |
SISMEMBER tags "tech" |
返回 1 存在,0 不存在。 |
| 移除 | SREM |
SREM tags "tech" |
删除指定成员。 |
| 交集(共同) | SINTER |
SINTER set1 set2 |
⭐社交核心功能(共同好友)。 |
| 随机弹出 | SPOP |
SPOP pool 1 |
随机移除并返回(抽奖开奖)。 |
5. Sorted Set(有序集合)—— 自动排序
场景:游戏排行榜、延迟消息队列(时间戳当 Score)。
| 操作 | 命令 | 示例 | 注意点(⭐重点) |
|---|---|---|---|
| 增/改 | ZADD |
ZADD rank 100 "p1" |
先写分数,后写成员。 |
| 倒序查 Top N | ZREVRANGE |
ZREVRANGE rank 0 2 WITHSCORES |
0 是最高分(冠军)。 |
| 正序查(升序) | ZRANGE |
ZRANGE rank 0 -1 |
分数从小到大,0 是最低分。 |
| 查看排名 | ZREVRANK |
ZREVRANK rank "p1" |
返回从 0 开始的排名(0 是第 1 名)。 |
| 累加分数 | ZINCRBY |
ZINCRBY rank 50 "p1" |
给 p1 加 50 分,自动重排。 |
| 删除成员 | ZREM |
ZREM rank "p1" |
删除指定成员。 |
三、易混淆知识点排雷(必看!)
| 混淆点 | 正确结论 |
|---|---|
LTRIM 0 2 删了哪些? |
保留索引 0-2,删除 3 及以后的。(记住:只保留这段!) |
LRANGE 0 2 的 0 是哪边? |
对于 LPUSH(左推入)来说,0 是列表最左边(最新数据)。 |
HSET 是新增还是修改? |
都是。字段不存在就新增,存在就覆盖修改(记住:幂等操作)。 |
KEYS 和 SCAN 用哪个? |
绝对用 SCAN,生产环境用 KEYS 等于自杀(阻塞)。 |
| Set 和 List 区别? | List 允许重复(聊天记录),Set 绝对去重(点赞用户)。 |
ZREVRANGE 的 0 是谁? |
最高分(第 1 名)。想拿前三名就用 ZREVRANGE key 0 2。 |
四、数据类型的“身材管理”建议
| 类型 | 内存占用 | 最大元素数 | 大 Key 警告 |
|---|---|---|---|
| String | 低 | 512 MB(值) | 别存超大 JSON(用 Hash 拆开)。 |
| Hash | 中 | 2^32-1 字段 | 一个 Hash 别超过 1 万个字段,否则 HGETALL 会卡。 |
| List | 低 | 2^32-1 元素 | 别当日志存几十万条(用 LTRIM 限制长度)。 |
| Set | 中 | 2^32-1 成员 | 大集合做交集运算时 CPU 飙升,注意控制。 |
| Sorted Set | 高(吃内存) | 2^32-1 成员 | 底层是跳表+哈希,非常吃内存,只存 ID 别存长文本。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YianNotes!

