Redis 常用数据类型及应用场景

类型描述常用命令典型应用场景
String最基本的类型,二进制安全SET / GET / INCR / APPEND缓存对象、计数器、限流标记、Token、验证码等
Hash类似于 Java 的 MapHSET / HGET / HGETALL / HMSET缓存对象属性(如用户信息、商品详情)
List有序列表,支持两端操作LPUSH / RPUSH / LPOP / LRANGE消息队列、任务列表、时间线、评论流
Set无序唯一集合SADD / SREM / SMEMBERS / SINTER标签系统、共同好友、抽奖去重、黑名单系统
ZSet有序集合,元素有分数 scoreZADD / ZRANGE / ZREM / ZREVRANK排行榜、权重排序、延迟任务、热度排行
Bitmap位数组(0/1)操作SETBIT / GETBIT / BITCOUNT活跃用户统计、签到打卡、唯一用户分析
HyperLogLog基数统计(近似去重计数)PFADD / PFCOUNTUV统计、活动参与人数估计
Geo地理位置数据(经纬度)支持GEOADD / GEODIST / GEORADIUS附近的人、地图选点、打车/外卖业务定位
Stream消息队列(类似 Kafka)XADD / XREADGROUP / XACK日志收集、异步消息流、延迟队列

✳️ 每种数据类型的适配项目场景详解


1️⃣ String:最常用类型

SET user:token:123 abcXYZ
GET user:token:123
INCR page:view:home

  • ✅ 适合缓存单个值,比如 token、用户信息快照、秒杀库存、验证码等

  • ✅ 也可以序列化整个对象为 JSON 存入(fastjson/jackson)


2️⃣ Hash:结构化对象缓存

HMSET user:1001 name "张三" age 25
HGETALL user:1001

  • ✅ 用于缓存用户、商品、订单等对象字段

  • ✅ 节省空间,支持字段级别读取与更新


3️⃣ List:有序、支持队列操作

LPUSH queue:order 1001
RPOP queue:order

  • ✅ 常用于消息队列、任务队列、聊天记录

  • ✅ 左进右出:先进先出;支持分页读取(LRANGE


4️⃣ Set:无序唯一集合

SADD tag:article:123 java redis
SISMEMBER tag:article:123 java

  • ✅ 标签系统、共同好友、黑名单、点赞用户集合

  • ✅ 支持集合操作:交集、并集、差集


5️⃣ ZSet:有序集合,按分数排序

ZADD rank:score 100 user1
ZADD rank:score 200 user2
ZRANGE rank:score 0 1

  • ✅ 实现排行榜、热度值、评论排序、任务延时调度(分数=时间戳)


6️⃣ Bitmap:位图结构,节省空间

SETBIT signin:20240619 12345 1
GETBIT signin:20240619 12345
BITCOUNT signin:20240619

  • ✅ 活跃用户、每日签到、布尔状态标识(0/1)

  • ✅ 能高效存储亿级用户维度的数据


7️⃣ HyperLogLog:近似去重计数

PFADD uv:20240619 user1 user2 user3
PFCOUNT uv:20240619

  • ✅ 大量唯一元素去重统计,误差 <1%

  • ✅ 适合 UV/活跃用户去重统计,内存占用极低(12KB)


8️⃣ Geo:地理位置服务

GEOADD shop:geo 116.40 39.90 shop_beijing
GEORADIUS shop:geo 116.40 39.90 10 km

  • ✅ 附近的人/店,LBS场景

  • ✅ 可查询距离、范围、排序


9️⃣ Stream:消息队列型数据结构

XADD log:order * orderId 123 status CREATED
XREADGROUP GROUP g1 c1 STREAMS log:order >

  • ✅ 类似 Kafka,支持持久化、ACK、消费者组

  • ✅ 适用于日志系统、消息流、下单异步处理


✅ 总结表:你可以在面试时引用 👇

类型关键特性高频应用场景
String最简单、灵活缓存、计数、限流、验证码、配置
Hash多字段对象缓存用户信息、商品详情、配置项缓存
List有序、可作队列消息队列、聊天记录、订单列表
Set无序唯一集合标签系统、点赞、去重、黑名单
ZSet有序+权重排行榜、热度榜、延迟任务
Bitmap位操作、布尔值签到、活跃用户、权限位图
HyperLogLog基数估算UV 去重、访问人数统计
Geo经纬度存储查询附近的人、附近店、地图服务
Stream消息流/队列日志收集、异步处理、事件驱动


🧠 面试答法推荐:

Redis 提供了丰富的数据结构:

  • 最常用的是 String,支持计数、缓存、状态标记;

  • Hash 可以结构化存储用户或商品数据;

  • List/Set/ZSet 对应队列、集合、排行榜场景;

  • Bitmap 和 HyperLogLog 是高性能空间压缩结构,用于活跃统计;

  • Stream 则适用于复杂的消息队列处理;
    实际开发中我们会根据业务场景选用最合适的数据结构,以减少内存占用和提高读写效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值