一、Redis 五大数据结构

数据结构特点企业场景
String字符串,最常用缓存、Token、验证码
Hash键值对集合用户信息、商品信息
List有序列表,可重复消息队列、聊天记录
Set无序集合,不重复点赞、标签、好友关系
ZSet(Sorted Set)有序集合,可排序排行榜、积分榜、热搜榜

企业中 80% 左右的场景都是 String 和 Hash


二、String(字符串)⭐⭐⭐⭐⭐

特点

  • 最基本的数据类型
  • 一个 Key 对应一个 Value
  • Value 可以是字符串、数字、JSON 等

例如:


user:name → Tom

count → 100

token:1 → xxxxx

常用命令

设置:


SET name Tom

获取:


GET name

删除:


DEL name

设置过期时间:


SET token abc EX 3600

数字自增:


INCR count

数字自减:


DECR count

企业应用

  • Token
  • 验证码
  • 商品缓存
  • 文章内容缓存
  • 访问计数

三、Hash(哈希)⭐⭐⭐⭐⭐

特点

一个 Key 对应多个字段。

例如:


user:1

username → Tom
age → 20
email → tom@test.com

不像 String 保存整个 JSON,而是可以单独修改某个字段。


常用命令

新增字段:


HSET user:1 username Tom

获取字段:


HGET user:1 username

获取所有字段:


HGETALL user:1

删除字段:


HDEL user:1 age

企业应用

  • 用户信息
  • 商品信息
  • 系统配置

四、List(列表)⭐⭐⭐⭐

特点

  • 有序
  • 可重复
  • 两端都可以插入和删除

例如:


A

B

C

常用命令

左侧插入:


LPUSH msg hello

右侧插入:


RPUSH msg world

左侧取出:


LPOP msg

右侧取出:


RPOP msg

查看全部:


LRANGE msg 0 -1

企业应用

  • 消息队列(简单)
  • 聊天记录
  • 最近浏览记录

五、Set(集合)⭐⭐⭐⭐⭐

特点

  • 无序
  • 元素唯一
  • 自动去重

例如:


Tom

Jack

Lucy

如果再次添加:


Tom

不会重复。


常用命令

添加:


SADD like:1 user1

查看:


SMEMBERS like:1

判断是否存在:


SISMEMBER like:1 user1

删除:


SREM like:1 user1

统计数量:


SCARD like:1

企业应用

  • 点赞
  • 收藏
  • 标签
  • 好友关系

六、ZSet(Sorted Set)⭐⭐⭐⭐⭐

特点

  • 元素唯一
  • 自动排序
  • 每个元素都有一个分数(Score)

例如:


Tom   100

Jack   95

Lucy   80

Redis 会自动按 Score 排序。


常用命令

添加:


ZADD rank 100 Tom

查看排行榜:


ZRANGE rank 0 -1

倒序查看:


ZREVRANGE rank 0 -1

增加分数:


ZINCRBY rank 10 Tom

查看排名:


ZREVRANK rank Tom

企业应用

  • 游戏排行榜
  • 销量排行榜
  • 热搜榜
  • 积分榜

七、如何选择数据结构?

需求推荐数据结构
一个值String
一个对象Hash
有顺序列表List
去重集合Set
排序集合ZSet

八、企业案例

用户信息


user:1

推荐:


Hash

Token


token:123456

推荐:


String

商品排行榜


product:rank

推荐:


ZSet

文章点赞用户


article:1:like

推荐:


Set

最新消息


message:list

推荐:


List

九、本章总结

数据结构是否有序是否可重复典型场景
String×缓存、Token
Hash×字段唯一用户信息
List消息队列、聊天
Set××点赞、标签
ZSet√(按 Score)×排行榜

本章一句话总结

Redis 的核心不是命令,而是根据业务场景选择合适的数据结构。


思考题(精简回答即可)

  1. 为什么用户信息更适合使用 Hash,而不是一个 JSON 字符串(String)?

    Hash 可以单独修改某个字段,例如只修改 age,不用重新保存整个对象。JSON String 每次修改一个字段,都需要读取整个 JSON,再重新写入

  2. List 和 Set 都能存多个元素,它们最大的区别是什么?
    List:有序、允许重复
    Set:无序、不允许重复
  3. 为什么点赞功能通常使用 Set,而不是 List?
    因为点赞要求:同一个用户只能点赞一次、自动去重,Set 可以保证唯一性。
  4. 排行榜为什么必须使用 ZSet,而不是 Set?
    因为排行榜需要:元素唯一、根据分数排序,Set只能存数据,不能记录排名
  5. Token、验证码为什么通常使用 String

    因为 Token 和验证码通常是:一个 Key 对应一个值。

  6. 如果要实现"最近浏览商品记录",你会选择哪种数据结构?为什么?

    使用 List。原因:最近浏览需要:保持浏览顺序、新浏览商品放前面、可以限制数量

更多推荐