Redis 数据类型及应用场景(图文讲解)
Redis 常用的 5 种数据类型
常见有 5 种数据类型,分别是 String 字符串、List 列表、Set 无需集合、Zset(Sorted Set 有序集合)、Hash 哈希:
新版本新增的数据类型
后续随着 Redis 版本的更新,又另外支持了 4 种数据类型, 分别是 BitMap 位图、HyperLogLog(简称 HLL)、GEO、Stream:
表格对比
数据类型 | 说明 | 内部实现 | 应用场景 |
---|---|---|---|
String | 不仅可以存字符串,也可以存数字(整数、浮点数) | 底层的数据结构实现主要是 int 和 SDS(简单动态字符串)。 | 1、简单的键值对缓存 2、分布式锁 3、计数器:通过自增自减 4、会话缓存,如分布式 Session、Token 等 |
List | 列表 | 1、3.2 版本之前底层数据结构是由双向链表或压缩列表实现 2、3.2 版本之后底层数据结构改成了 quicklist | 1、消息队列(发布订阅功能) |
Set | 无序并唯一的键值对集合 | 底层数据结构是由哈希表或整数集合实现 | 1、粉丝列表功能,通过交集、并集、差集的操作,比如交集可以实现共同关注的功能,可以把两个人的粉丝列表整一个交集 2、抽奖活动 |
Hash | 键值对形式的集合,value 值格式为 value=[{field1,value1},...{fieldN,valueN}] , 特别适合存储对象 | 1、7.0 版本之前底层数据结构为压缩列表或哈希表; 2、7.0 版本之后,数据结构为 listpack ; | 1、缓存结构化的数据,比如一个对象 2、商城购物车数据 |
ZSet | 有序集合 | 1、7.0 版本之前底层数据结构为压缩列表或跳表; 2、7.0 版本之后由 listpack 来实现; | 1、排行榜功能,如获取排名前几名的用户 |
BitMap | 位图,是一串连续的二进制数组(0 和 1) | 用 String 类型作为底层数据结构实现的一种统计二值状态的数据类型 | 1、签到统计 2、连续签到用户总数 |
HLL | 提供不精确的去重计数 | HyperLogLog 算法是一种非常巧妙的近似统计海量去重元素数量的算法 | 1、海量数据基数统计的场景,比如百万级网页 UV 计数 |
GEO | 主要用于存储地理位置信息 | 底层是 Sorted Set 集合类型 | 1、附近的人功能 2、滴滴打车 3、附近的餐馆 |
Stream | 5.0 版本新增,专门为消息队列设计的数据类型 | 1、消息队列, 相比于基于 List 类型实现的消息队列,它有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据。 |