news 2026/4/16 12:56:02

Redis的常用数据结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis的常用数据结构

文章目录

      • String
      • Hash
      • List
      • Set
      • Sorted Set
      • 四种高级数据类型
        • BitMap
        • HyperLogLog
        • GEO
        • Stream
      • Redis 9 种常见的基本数据类型应用场景汇总

Redis 常见的数据结构主要有五种,这五种类型分别为:String(字符串)、List(列表)、Hash、Set(集合)、Zset(有序集合,也叫sorted set)。

String

字符串是Redis中最基本的数据类型,可以存储任何类型的数据,包括文本、数字和二进制数据。它的最大长度为512MB。

使用场景

  • 缓存:存储临时数据,如用户会话、页面缓存。
  • 计数器:用于统计访问量、点赞数等,通过原子操作增加或减少。

Hash

哈希是一个键值对集合,适合存储对象的属性。Redis内部使用哈希表实现,适合小规模数据。

使用场景

  • 商品详情:存储商品的各个属性,方便快速检索。

List

列表是有序的字符串集合,支持从两端推入和弹出元素,底层实现为双向链表。

使用场景

  • 消息队列:用于简单任务调度、消息传递等场景,通过LPUSHRPOP操作实现生产者消费者模式。
  • 历史记录:存储用户操作的历史记录,便于快速访问。

Set

集合是无序且不重复的字符串集合,使用哈希表实现,支持快速查找和去重操作。

使用场景

  • 标签系统:存储用户的兴趣标签,避免重复。
  • 唯一用户集合:记录访问过某个页面的唯一用户,方便进行分析。

Sorted Set

有序集合类似于集合,但每个元素都有一个分数(score),用于排序。底层使用跳表实现,支持快速的范围查询。

使用场景

  • 排行榜:存储用户分数,实现实时排行榜。
  • 任务调度:根据任务的优先级进行排序,方便调度执行。

四种高级数据类型

随着 Redis 版本的更新,后面又增加 BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)。

BitMap

BitMap 是一种以位为单位存储数据的高效方式,适合用来表示布尔值(如存在性、状态等)。每个 bit 可以表示一个状态(0 或 1),使用空间少且操作快速。

使用示例:假设要统计每天用户的在线状态,可以用 Bitmap 记录每个用户是否在线:

SETBIT user:online:2024-09-27 12345 1 # 用户 ID 12345 在 2024-09-27 在线 GETBIT user:online:2024-09-27 12345 # 获取用户 ID 12345 在该日期的在线状态
HyperLogLog

HyperLogLog 是一种概率性数据结构,主要用于估算基数(不同元素的数量),内存占用固定,适合处理大规模数据的去重和计数。

使用示例:假设要估算访问网站的独立用户数量:

PFADD unique:visitors user1 user2 user3 # 添加用户 ID PFCOUNT unique:visitors # 估算独立用户数量
GEO

GEO 是 Redis 提供的一种用于存储地理位置信息的数据结构,可以存储经纬度信息并支持空间查询,例如计算距离和获取范围内的坐标。

使用示例:假设要存储城市的位置并查找距离某个城市在一定范围内的其他城市:

GEOADD cities 13.361389 38.115556 "Palermo" # 添加城市 GEOADD cities 15.087269 37.502669 "Catania" # 添加城市 GEODIST cities "Palermo" "Catania" "km" # 计算两个城市之间的距离 GEORADIUS cities 15.0 37.5 100 km # 查找指定范围内的城市
Stream

Stream 是 Redis 提供的一种日志数据结构,适合于存储时间序列数据或消息流。支持高效的消息生产和消费模式,具有持久性和序列化特性。

使用示例:假设要存储传感器数据流,可以使用 Stream 进行数据插入和消费:

XADD sensor:data * temperature 22.5 humidity 60 # 向 Stream 添加传感器数据 XRANGE sensor:data - + # 获取 Stream 中的所有数据 XREAD COUNT 10 STREAMS sensor:data $ # 读取新的传感器数据

Redis 9 种常见的基本数据类型应用场景汇总

  • String :缓存对象、计数器、分布式锁、分布式 session 等
  • List:阻塞队列、消息队列(但是有两个问题:1. 生产者需要自行实现全局唯一 ID;2. 不能以消费组形式消费数据)等
  • Hash:缓存对象、购物车等
  • Set:集合聚合计算(并集、交集、差集)的场景,如点赞、共同关注、收藏等
  • Zset:最典型的就是排行榜,这个也是面试中经常问到的点
  • BitMap(2.2 版新增):主要有 0 和 1 两种状态,可以用于签到统计、用户登录态判断等
  • HyperLogLog(2.8 版新增):海量数据基数统计的场景,有一定的误差,可以根据场景选择使用,常用于网页 PV、UV 的统计
  • GEO(3.2 版新增):存储地理位置信息的场景,比如说百度地图、高德地图、附近的人等
  • Stream(5.0 版新增):这个主要就是消息队列了,可以实现一个简单的消息,其相比 list 多了两个特性,分别是自动生成全局唯一消息ID以及支持以消费组形式消费数据(同一个消息可被分发给多个单消费者和消费者组),相比 pub/sub 它是可以被持久化。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:15:15

DHCP (动态主机配置协议)软考系统架构师考点秒杀

针对 DHCP (动态主机配置协议) 这一考点,它是网络管理中最基础但也最容易考细节的协议。我为你从 工作原理(DORA过程)、租约更新机制 以及 软考必考细节 三个维度进行深度梳理。一、 基础硬指标(必背)全称:…

作者头像 李华
网站建设 2026/4/16 11:00:38

3步快速配置MacBook刘海屏音乐控制中心

3步快速配置MacBook刘海屏音乐控制中心 【免费下载链接】boring.notch TheBoringNotch: Not so boring notch That Rocks 🎸🎶 项目地址: https://gitcode.com/gh_mirrors/bor/boring.notch 厌倦了MacBook上那个看似无用的刘海屏?现在…

作者头像 李华
网站建设 2026/4/16 10:53:56

FlatVersusGouraud 对比平面着色和高洛德着色

一:主要的知识点 1、说明 本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①平面着色与高洛德着色的区别 二&#xff…

作者头像 李华
网站建设 2026/4/13 21:53:28

MotionBlur 演示简单运动模糊

一:主要的知识点 1、说明 本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtkRenderStepsPass的使用 二&#xff1a…

作者头像 李华
网站建设 2026/4/16 9:14:36

Winhance:快速提升Windows体验的终极优化工具

Winhance:快速提升Windows体验的终极优化工具 【免费下载链接】Winhance PowerShell GUI application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance 想要让您的Windows系统运行更流畅…

作者头像 李华