Redis:数据结构及其应用场景,超详细!

Redis是一款开源的、基于内存的、高性能的 ​Key-Value 数据存储系统,广泛应用于缓存、会话管理、排行榜、消息队列、实时统计等场景。

Redis 的强大之处不仅在于它将数据存储在内存中以提供极快的读写速度,还在于它支持 ​多种灵活的数据结构​,每种数据结构都针对特定的应用场景做了优化。


一、Redis 支持的主要数据结构

Redis 提供了以下 ​核心数据结构类型,每种类型都对应一个或多个底层命令,用于高效地操作数据:

数据结构类型

Redis 键类型

简要说明

典型应用场景

String(字符串)​

key-value

最基本的键值类型,值可以是文本、数字或二进制数据

缓存、计数器、分布式锁、配置存储

List(列表)​

key-list

一个有序的字符串元素集合,基于双向链表实现

消息队列、最新消息排行、历史记录

Set(集合)​

key-set

无序、唯一的字符串元素集合

标签系统、好友关系、去重统计

Hash(哈希表)​

key-hash

类似 Map 的结构,存储 field-value 对

对象存储、用户信息、配置项

Sorted Set(有序集合 / ZSet)​

key-zset

带权重排序的集合,每个元素关联一个分数(score)

排行榜、优先级队列、范围查询

Bitmap(位图)​

key-bit

基于 String 的位操作,用于高效存储布尔值

用户签到、活跃状态统计

HyperLogLog(基数统计)​

key-hll

用于基数(不重复元素个数)统计,误差极小

UV(独立访客)统计、大规模去重估算

Stream(流)​

key-stream

类似消息队列,支持多消费者、消息持久化

消息队列、事件溯源、日志流处理(Redis 5.0+)

Geospatial(地理空间)​

key-geo

存储地理位置信息,支持距离计算、范围查询

附近的人、地点搜索、地理围栏

⭐ ​最常用的 5 种数据结构:String、List、Hash、Set、Sorted Set(ZSet)​


二、各数据结构详解与典型用途

1. String——最基础、常用

特点:​

  • 一个 Key 对应一个 Value,Value 是字符串(也可以是数字、二进制数据)。
  • Value 最大支持 ​512MB
  • 支持多种类型的操作:设置、获取、追加、自增、自减等。

常用命令:​

  • SET key value/ GET key
  • INCR key(自增,用于计数器)
  • DECR key(自减)
  • APPEND key value(追加字符串)
  • SETNX key value(不存在才设置,可用于分布式锁)

典型应用场景:​

  • 缓存​:缓存数据库查询结果,如 GET user:1
  • 计数器​:文章阅读量、点赞数,如 INCR article:views:1001
  • 分布式锁​:利用 SETNX实现简单的锁机制
  • 配置存储​:存储系统或用户配置项

2. List(列表)——有序、可重复,支持两端操作

特点:​

  • 一个 Key 对应一个有序的字符串元素集合,元素可重复。
  • 基于双向链表实现,支持从头部或尾部快速插入/删除。
  • 适合实现队列(FIFO)和栈(LIFO)​

常用命令:​

  • LPUSH key value/ RPUSH key value(从左/右插入)
  • LPOP key/ RPOP key(从左/右弹出)
  • LRANGE key start stop(获取范围内的元素)
  • LLEN key(获取列表长度)

典型应用场景:​

  • 消息队列​:简单的生产者-消费者模型,如任务队列
  • 最新消息/动态​:如“最近发布的文章”、“最新登录用户”
  • 历史记录​:如用户浏览历史、操作记录(可限制长度)

3. Set(集合)——无序、唯一

特点:​

  • 一个 Key 对应一个无序的、唯一的字符串集合,不允许重复元素。
  • 支持高效的集合运算:交集、并集、差集。

常用命令:​

  • SADD key member(添加元素)
  • SMEMBERS key(获取所有成员)
  • SISMEMBER key member(判断是否在集合中)
  • SINTER key1 key2(交集)、SUNION(并集)、SDIFF(差集)

典型应用场景:​

  • 标签系统​:如文章的标签,一个文章对应多个标签
  • 好友关系 / 共同关注​:利用集合运算求共同好友
  • 去重统计​:统计 UV(独立访客)、防止重复提交
  • 抽奖系统​:随机抽取不重复用户

4. Hash(哈希表)——键值对的集合(类似 Map)

特点:​

  • 一个 Key 对应一个 ​Field-Value 的映射表(类似 JSON 对象或 Map)​
  • 适合存储对象,比如用户信息、商品详情等。
  • 支持单独操作某个字段,无需读取整个对象。

常用命令:​

  • HSET key field value/ HGET key field
  • HMSET key field1 value1 field2 value2(批量设置)
  • HGETALL key(获取所有字段和值)
  • HDEL key field(删除某个字段)
  • HKEYS key/ HVALS key(获取所有字段 / 值)

典型应用场景:​

  • 对象存储​:如用户信息 user:1 {name: 'Alice', age: 20}
  • 配置管理​:存储一组相关的配置参数
  • 缓存对象​:替代多个 String Key,更节省空间、便于管理

5. Sorted Set(有序集合 / ZSet)——带权重的集合

特点:​

  • 一个 Key 对应一个有序的集合,每个元素都关联一个分数(score),根据 score 排序
  • 元素(member)具有唯一性,但 score 可以相同。
  • 支持按照分数范围或排名范围查询,非常适合做排行榜。

常用命令:​

  • ZADD key score member(添加元素及分数)
  • ZRANGE key start stop [WITHSCORES](按排名正序获取)
  • ZREVRANGE key start stop [WITHSCORES](按排名倒序获取,即从高到低)
  • ZRANGEBYSCORE key min max(按分数范围查询)
  • ZSCORE key member(获取某个元素的分数)
  • ZCARD key(获取集合中元素总数)

典型应用场景:​

  • 排行榜​:如游戏得分榜、热门文章排行
  • 优先级队列​:按权重处理任务
  • 范围查询​:如按时间范围获取热门内容
  • 延迟队列 / 定时任务管理

三、其他高级数据结构(简要介绍)

6. Bitmap(位图)

  • 基于 String 类型实现,通过位操作来记录布尔状态。
  • 非常适合大规模状态的存储与统计,比如用户每日签到。

应用场景:​

  • 用户签到(每天一个 bit)
  • 活跃用户统计
  • 布隆过滤器基础

7. HyperLogLog

  • 用于基数统计​(即统计不重复元素的个数),例如统计 UV(独立访客数)。
  • 占用空间极小,但有一定的误差(约 0.81%)。

应用场景:​

  • 统计页面 UV、广告点击去重数等大规模数据去重统计

8. Stream(流,Redis 5.0+)

  • 类似消息队列,但功能更加强大,支持消息持久化、消费者组、ACK 机制。
  • 适合做事件溯源、日志流、异步任务队列

应用场景:​

  • 消息队列(比 List 更强大)
  • 订单处理、支付流水
  • 日志采集与处理

9. Geospatial(地理空间,Redis 3.2+)

  • 用于存储地理位置(经纬度),支持计算两点间距离、范围查询等。

应用场景:​

  • 附近的人、地点搜索
  • 地理围栏、配送范围判断

四、总结:Redis 数据结构与适用场景速查表

数据结构

类型关键词

核心特点

典型应用场景

String

key-value

简单键值,支持多种数据类型和原子操作

缓存、计数器、分布式锁、配置

List

key-list

有序、可重复,支持两端操作

消息队列、最新动态、历史记录

Set

key-set

无序、唯一,支持集合运算

标签、好友关系、去重、抽奖

Hash

key-hash

类似 Map,存储 field-value 对

用户信息、对象存储、配置项

Sorted Set (ZSet)​

key-zset

带分数排序,唯一成员

排行榜、优先级队列、范围查询

Bitmap

key-bit

位操作,高效存储布尔值

签到、状态统计

HyperLogLog

key-hll

基数统计,低内存高效率

UV 统计、大规模去重估算

Stream

key-stream

消息流,支持消费者组

消息队列、事件流、日志处理

Geo

key-geo

地理坐标与距离计算

附近的人、地理围栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值