本篇帮助你学习到Redis 常见数据类型和应用场景
前言
我们都知道Redis是一个Key → Value结构的数据库,Redis 和传统数据库最大的区别是:数据存在内存里,这使得他读取的速度非常快。问题来了:
如果 Redis 只是 Key-Value,会发生什么?
假设 Redis 只有最简单结构:
key → value
那 value 只能是一个字符串。
比如存用户信息:
user:1 → "Tom,20,Beijing"
问题马上出现:
如果我只想修改 年龄:
20 → 21
你必须:
1 取出整个字符串
2 解析
3 修改
4 再写回
这非常麻烦。
于是 Redis 做了一件非常聪明的事情:
直接提供多种数据结构,让你更自然地存数据。
Redis 不只是数据库,它更像一个:
高性能数据结构服务器
Redis 数据类型整体结构
String
Hash
List
Set
Sorted Set (ZSet)
| 数据结构 | 像什么 |
|---|---|
| String | 一个值 |
| Hash | 一个对象 |
| List | 一个队列 |
| Set | 一个不重复集合 |
| ZSet | 一个带排名的集合 |
String:最基础的数据类型
在Redis中String不仅仅可以存储字符串。
Redis 的 String 可以存:
字符串
数字
JSON
二进制
应用场景 1:缓存
例如:
user:1001 → JSON用户信息
流程:
请求用户信息
↓
先查 Redis
↓
Redis 有 → 直接返回
Redis 没有 → 查数据库
这样数据库压力会小很多。
应用场景 2:计数器
Redis 的 String 支持一个非常强大的操作:
INCR
意思是:
数字 +1
例如统计文章阅读量:
article:100:view → 100
用户访问一次:
INCR article:100:view
阅读量自动增加。
常见用途:
点赞数 阅读量 库存 访问量
Hash:用来存对象
如果要存 结构化数据,String 就不够方便了。
比如用户对象:
id
name
age
city
Redis 提供:Hash
结构像这样:
key → field → value
例子:
user:1001
name → Alice
age → 20
city → Shanghai
你可以把 Hash 理解为:
一个对象
Hash 的优势
如果用户年龄更新:
20 → 21
只需要修改一个字段:
HSET user:1001 age 21
不需要更新整个对象。
Hash 常见场景
非常适合存:
用户信息 商品信息 订单信息
因为它们本质上都是:
一个对象 + 多个属性
List:有顺序的列表
List 的本质是:
一个有序队列
例如:
消息1, 消息2, 消息3
Redis 支持两端操作:
LPUSH 左边插入 RPUSH 右边插入
所以它可以模拟:
队列
应用场景 1:消息队列
生产者:
LPUSH queue message
消费者:
RPOP queue
流程:
生产者 → Redis List → 消费者
这种方式常用于简单系统的任务队列。
应用场景 2:最新列表
例如:
最新文章 最新评论
新数据:
LPUSH
读取:
LRANGE
Set:不重复集合
Set 的特点非常简单:
元素不会重复
例如:
{1,2,3,4}
如果你插入:
SADD set 3
结果仍然是:
{1,2,3,4}
Set 的应用
用户去重
例如统计:
今天访问网站的用户
操作:
SADD visit:20250308 user1
SADD visit:20250308 user2
Redis 自动去重。
共同好友
Redis 支持集合运算:
交集
并集
差集
例如:
A 的好友
B 的好友
求:
共同好友
ZSet:带排名的集合
ZSet(Sorted Set)是 Redis 非常强大的结构。
结构:
value + score
例如:
Alice 100
Bob 80
Tom 120
Redis 会按 score 自动排序:
Tom 120
Alice 100
Bob 80
最经典应用:排行榜
例如游戏排行榜:
玩家A 1500
玩家B 2000
玩家C 1800
存入:
ZADD rank 1500 playerA ZADD rank 2000 playerB
查询:
ZRANGE rank
即可得到排行榜。
常见用途:
游戏排行榜
热搜榜
点赞排行
积分榜
总结
本篇讲述了Redis中的五种常见数据类型:String,Hash,List,set,Zset。具体区分见下表。
| 数据结构 | 本质 | 典型场景 |
|---|---|---|
| String | 单值 | 缓存、计数器 |
| Hash | 对象 | 用户信息 |
| List | 队列 | 消息队列 |
| Set | 去重集合 | 用户集合 |
| ZSet | 排序集合 | 排行榜 |