简述 Redis 常见的数据类型,了解其底层及应用

本文详细介绍了Redis中的五种基本数据类型(String、List、Hash、Set、ZSet)以及三种特殊数据类型(BitMap、GEO、HyperLogLog),探讨了它们的底层实现、应用场景和适用条件。
摘要由CSDN通过智能技术生成

Redis 常见的数据类型

一、五种基本数据类型

1、String

1.1 底层数据结构:SDS

与原生 C 语言字符串相比

(1)SDS 不仅可以存放文本数据还可以存放二进制数据,所以可以存放图片、视频、音频等数据;

(2)SDS 获取字符串长度的复杂度为O(1);

(3)SDS 不会造成缓存区溢出。

扩容机制

当字符串长度小于1M的时候扩容是加倍现有的空间;如果超过1M则每次扩容增加1M的空间;空间上限是512M。

1.2 应用场景

(1)缓存对象

(2)常规计数,如:点赞数、阅读量、转发数等

(3)分布式锁

(4)共享 session 信息

2、List

2.1 底层数据结构:双向链表或压缩列表

⚪如果列表的元素个数小于 512 个(默认值,可由 list-max-ziplist-entries 配置),列表每个元素的值都小于 64 字节(默认值,可由 list-max-ziplist-value 配置),Redis 会使用压缩列表作为 List 类型的底层数据结构;

⚪如果列表的元素不满足上面的条件,Redis 会使用双向链表作为 List 类型的底层数据结构;

但是在 Redis 3.2 版本之后,List 数据类型底层数据结构就只由 quicklist 实现了,替代了双向链表和压缩列表。

2.2 应用场景

(1)消息队列

存储信息时必须满足三个需求:消息保序、处理重复的消息、保证消息的可靠性。

3、Hash

3.1 底层数据结构:压缩列表或哈希表

⚪如果哈希类型元素个数小于 512 个(默认值,可由 hash-max-ziplist-entries 配置),所有值小于 64 字节(默认值,可由 hash-max-ziplist-value 配置)的话,Redis 会使用压缩列表作为 Hash 类型的底层数据结构;

⚪如果哈希类型元素不满足上面条件,Redis 会使用哈希表作为 Hash 类型的底层数据结构。

在 Redis 7.0 中,压缩列表数据结构已经废弃了,交由 listpack 数据结构来实现了。

3.2 应用场景

(1)缓存对象

在介绍 String 类型的应用场景时有所介绍,String + Json也是存储对象的一种方式,那么存储对象时,到底用 String + json 还是用 Hash 呢?

一般对象用 String + Json 存储,对象中某些频繁变化的属性可以考虑抽出来用 Hash 类型存储。

(2)购物车

4、Set

4.1 底层数据结构:哈希表或整数集合

⚪如果集合中的元素都是整数且元素个数小于 512 (默认值,set-maxintset-entries配置)个,Redis 会使用整数集合作为 Set 类型的底层数据结构;

⚪如果集合中的元素不满足上面条件,则 Redis 使用哈希表作为 Set 类型的底层数据结构。

4.2 应用场景

(1)点赞(一个用户只能点赞一次)

(2)交并集(共同关注、共同好友)

(3)抽奖活动

5、ZSet

5.1 底层数据结构:压缩列表或跳表

⚪如果有序集合的元素个数小于 128 个,并且每个元素的值小于 64 字节时,Redis 会使用压缩列表作为 Zset 类型的底层数据结构;

⚪如果有序集合的元素不满足上面的条件,Redis 会使用跳表作为 Zset 类型的底层数据结构;

Redis 7.0 中压缩列表数据结构已经废弃了,交由 listpack 数据结构来实现了。

Zset 的实现原理是通过跳跃表提供有序性,使元素按照分数进行排序,而哈希表则用于维护元素的唯一性和快速检索。这种组合使得 Redis 能够高效地处理有序集合的操作,包括添加元素、删除元素、按分数范围获取元素等。

5.2 应用场景

(1)排行榜

(2)电话、姓名排序

二、三种特殊数据类型

1、BitMap

1.1 底层数据结构:String
Bitmap 本身是用 String 类型作为底层数据结构实现的一种统计二值状态的数据类型。

String 类型是会保存为二进制的字节数组,所以,Redis 就把字节数组的每个 bit 位利用起来,用来表示一个元素的二值状态,你可以把 Bitmap 看作是一个 bit 数组。

1.2 应用场景(只需要一个bit位来表示某个元素对应的值或状态)

(1)用户的在线状态

(2)签到统计

(3)连续签到用户总数

2、GEO

2.1 底层数据结构:Sorted Set
2.2 应用场景

(1)对二维地图做区间划分

(2)对区间进行编码

(3)滴滴叫车

3、HyperLogLog

3.1 应用场景

(1)百万级网页UV计数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThoU4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值