【Redis进阶】不止是缓存!Redis的5种核心数据结构与实战场景全解析

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 本文深入浅出地解析了Redis五大核心数据结构:String、Hash、List、Set和ZSet,结合图解与实战场景,涵盖缓存、计数器、分布式锁、购物车、消息队列、排行榜等典型应用,助你摆脱“只会SET/GET”的困境,真正发挥Redis的高性能潜力。

前言

提到 Redis,很多开发者的第一反应是:“哦,那个做缓存的,速度很快。” 的确,Redis 是内存数据库的速度之王。但如果你只会在项目里用 SET key valueGET key,那你仅仅用到了 Redis 10% 的功力,甚至有点“暴殄天物”。

Redis 之所以强大,是因为它内置了丰富且高效的数据结构。今天我们就来通过图解+实战的方式,彻底搞懂 Redis 最基础也是最核心的 5 种数据结构:String、List、Set、Hash、ZSet


1. String(字符串)—— 万物之源

这是 Redis 最基本的数据类型,一个 Key 对应一个 Value。虽然叫 String,但它其实可以存储字符串、数字甚至是序列化后的对象(如 JSON)。

实战场景:

  • 常规缓存: 缓存用户信息、Session 会话、HTML 页面。
  • 计数器(Counter): 比如视频播放量、文章点赞数。因为 Redis 是单线程的,原子性操作 INCR 天然支持高并发计数,不会像数据库那样出现并发一致性问题。
  • 分布式锁: 利用 SETNX (Set if Not eXists) 命令来实现互斥锁,防止秒杀超卖。

常用命令:

Bash

# 存入
SET user:1:name "Tom"
# 获取
GET user:1:name
# 计数器自增
INCR article:1001:views

2. Hash(哈希)—— 对象存储专家

Hash 是一个键值对集合,类似于 Java 中的 HashMap 或 Python 的 Dict。它特别适合存储对象

很多人喜欢把对象转成 JSON 存进 String 里,这没问题。但如果你只想修改对象中的某一个字段(比如只修改用户的年龄),用 String 就需要把整个 JSON 取出来反序列化、修改、再序列化存回去,开销很大。 而 Hash 可以直接修改某个字段。

实战场景:

  • 用户个人信息: ID为Key,字段包含姓名、年龄、积分等。
  • 购物车: 用户ID为Key,商品ID为Field,数量为Value。

常用命令:

Bash

# 存储一个用户对象
HSET user:1 name "Tom" age 18 balance 100
# 只获取用户的余额
HGET user:1 balance
# 用户消费了,余额减 10
HINCRBY user:1 balance -10

3. List(列表)—— 双向链表

Redis 的 List 实际上是一个双向链表。这意味着它支持在头部(Left)和尾部(Right)进行高效的插入和删除操作。

实战场景:

  • 消息队列(Message Queue): 利用 LPUSH(左进)和 RPOP(右出),可以实现一个简单的先进先出(FIFO)队列。
  • 最新消息/动态: 比如微信朋友圈的时间线。新的动态 LPUSH 进去,获取前10条就用 LRANGE 0 9

常用命令:

Bash

# 生产者:从左边放入消息
LPUSH msg_queue "msg1"
LPUSH msg_queue "msg2"
# 消费者:从右边取出消息
RPOP msg_queue
# 输出:msg1
# 获取最新的5条数据
LRANGE timeline 0 4

4. Set(集合)—— 去重与社交神器

Set 是 String 类型的无序集合。它最大的特点是:自动去重。你往里面塞10个 "A",它里面还是只有1个 "A"。

此外,Set 支持强大的集合运算:交集、并集、差集。这让它成为做社交功能的首选。

实战场景:

  • 抽奖活动: 把所有参与用户的ID丢进 Set,然后用 SRANDMEMBERSPOP 随机抽取幸运儿,天然保证不重复中奖。
  • 点赞/收藏: 一个用户只能点赞一次。
  • 共同好友(交集): 我关注的人是 Set A,你关注的人是 Set B,SINTER A B 算出来的就是共同关注。

常用命令:

Bash

# 添加元素
SADD coding_lovers "Java" "Python" "Go" "Java"
# 查看数量(结果是3,Java自动去重了)
SCARD coding_lovers
# 计算交集(共同好友)
SINTER user:1:friends user:2:friends

5. ZSet(有序集合)—— 排行榜霸主

ZSet (Sorted Set) 是 Redis 最具特色的数据结构。它在 Set 的基础上,给每个元素关联了一个分数(Score)。 Redis 会自动根据 Score 对元素进行排序。

实战场景:

  • 排行榜: 游戏战力榜、电商销量榜、微博热搜。
  • 带权重的消息队列: 优先级高的任务 Score 设大一点,优先被取出来。

常用命令:

Bash

# 添加元素(Score在名字前面)
ZADD leaderboard 100 "Tom"
ZADD leaderboard 90 "Jerry"
ZADD leaderboard 105 "Spike"
# 获取前三名(按分数倒序)
ZREVRANGE leaderboard 0 2
# 输出:1. Spike, 2. Tom, 3. Jerry

总结

  • String:简单的KV缓存,计数器。
  • Hash:存对象,购物车。
  • List:消息队列,时间线。
  • Set:去重,抽奖,共同好友。
  • ZSet:排行榜。

在技术选型时,不要手里拿着锤子(String)看什么都是钉子。根据业务场景选择合适的数据结构,能让你的系统性能和代码优雅度同时飞升。

相关文章
|
2月前
|
运维 监控 Shell
【自动化运维】告别手动搬运!编写Shell脚本自动备份与清理日志
本文介绍如何通过Shell脚本结合Crontab,实现服务器日志的自动备份与清理。每天凌晨2点自动压缩昨日日志并保存至备份目录,同时删除7天前的旧备份,防止磁盘占满。脚本具备目录创建、压缩打包、错误提示和日志记录功能,操作安全可靠,适合Linux运维新手实践自动化管理。
|
4月前
|
缓存 NoSQL 关系型数据库
MySQL 与 Redis 如何保证双写一致性?
我是小假 期待与你的下一次相遇 ~
542 7
|
2月前
|
运维 监控 Java
【Linux基础】开发日常:盘点后端开发中最高频使用的10个Linux命令
本文为后端开发者整理了日常运维中最常用的10个Linux命令,涵盖文件查看、日志监控、进程管理、网络排查等核心场景。从`ls`、`cd`到`tail`、`grep`,再到`ps`、`netstat`、`top`等,结合实际案例讲解高频用法,助你高效应对服务器操作,提升开发效率。
|
7月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
5月前
|
存储 消息中间件 NoSQL
Redis数据结构:别小看这5把“瑞士军刀”,用好了性能飙升!
Redis提供5种基础数据结构及多种高级结构,如String、Hash、List、Set、ZSet,底层通过SDS、跳表等实现高效操作。灵活运用可解决缓存、计数、消息队列、排行榜等问题,结合Bitmap、HyperLogLog、GEO更可应对签到、UV统计、地理位置等场景,是高性能应用的核心利器。
|
12月前
|
人工智能 负载均衡 并行计算
DeepSeek-V3 高效训练关键技术分析
本文从模型架构、并行策略、通信优化和显存优化四个方面展开,深入分析了DeepSeek-V3高效训练的关键技术,探讨其如何以仅5%的算力实现对标GPT-4o的性能。
1906 146
|
IDE Java 分布式数据库
Apache HBase 落地JAVA 实战
Apache HBase 落地 Java 实战主要涉及使用 Java API 来操作 HBase 数据库,包括表的创建、删除、数据的插入、查询等操作。以下是一个基于 Java 的 HBase 实战指南,包括关键步骤和示例代码。
849 23
|
存储 JavaScript 前端开发
阿里云云效操作报错合集之如何解决云效流水线内存溢出的问题
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
Kubernetes 容灾 Java
nacos常见问题之启动报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
Shell iOS开发 MacOS
Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标
Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标
893 0