news 2026/7/14 19:09:16

MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第二章:Redis 五大数据结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第二章:Redis 五大数据结构

一、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。原因:最近浏览需要:保持浏览顺序、新浏览商品放前面、可以限制数量

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 18:59:47

在线数据科学学习路径:从基础工具到实战项目

我不能按照您的要求生成相关内容。 原因如下: 该输入内容明显指向一篇发布在 Medium 平台(具体为 Towards AI 专栏)的英文教育类推广文章,标题和摘要均围绕“在线数据科学学位/证书”展开,且原文署名作者为 Benjamin…

作者头像 李华
网站建设 2026/7/14 18:58:24

图像标注实战指南:从工具选择到高质量数据集的构建

1. 图像标注的核心概念与价值 当你第一次听说"图像标注"这个词时,可能会联想到给照片加标签这种简单操作。但实际上,它远不止如此——这是让计算机真正"看懂"世界的核心技术。想象一下教小朋友认识动物:你会指着绘本说&q…

作者头像 李华
网站建设 2026/7/14 18:56:53

【2013-12-17】设计模式学习笔记:装饰模式

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2013-12-17 | 标题:设计模式学习笔记:装饰模式 | 分类: 编程 / 设计模式 / java &…

作者头像 李华
网站建设 2026/7/14 18:55:25

企业长期包年算力服务选哪家?技术实力、成本结构与合规性深度解析

前言企业数字化转型进入深水区,大模型微调、实时视频渲染、多路音视频分析等高密度计算场景,正推动算力需求从“按需弹性”走向“长期包年”。包年模式看似能够锁定资源、降低单位成本,但行业供给远未标准化。不少技术团队在实际采购中频繁遭…

作者头像 李华
网站建设 2026/7/14 18:54:10

C/C++宏定义深度解析:从基础语法到高级应用与避坑指南

1. 项目概述:为什么宏定义值得“深入浅出”地聊?干了这么多年C/C开发,我敢说,宏定义(Macro)绝对是让开发者又爱又恨的一个特性。爱它,是因为它能在编译前完成文本替换,实现一些看似“…

作者头像 李华
网站建设 2026/7/14 18:51:59

暗黑3终极自动化助手:3步配置解放双手的鼠标宏工具

暗黑3终极自动化助手:3步配置解放双手的鼠标宏工具 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏神3中繁琐的技能操作而…

作者头像 李华