【Redis】——原理篇——数据结构

目录

一.底层数据结构

1.动态字符串

2.IntSet

3.Dict(字典)

4.ZipList

1.介绍

2.ziplist连锁更新问题

5.QuickList

6.SkipList(跳表)

6.RedisObject

二.五种数据结构

1.String

1.RAW编码方式

2.EMBSTR编码

3.INT编码

4.总结

2.List

3.Set(好友共同关注)

4.ZSet(排行榜)

5.Hash


一.底层数据结构

1.动态字符串

缺点:

1.字符串长度需要做运算:需要遍历,需要运算

2.非二进制安全:\0表示结束,万一我们在数组中就有这个\0 导致出现问题

3.不可修改:"字面值"放在常量池中,无法修改

有\0也不会停止,知道字符串长度会读完为止。

动态扩容

2.IntSet

有序:是通过二分查找来完成的

**唯一:**做判断

3.Dict(字典)

当我们的元素越来越多,导致链表过长,怎么办?

rehash

4.ZipList

1.介绍

Dict会产生内存碎片,而且大量的指针会占用大量的内存。所以就引出ziplist。它是一片连续的内存空间,而且没有指针。

那么又没有指针,而且每个entry占的大小又不一样,它是如何找到每个entry的呢?

2.ziplist连锁更新问题

比如说现在出现了一个大于254字节的数据

每一个节点要记录前一个的字节大小,本来后一个本来是够的,结果不够了,就得不断的向后迁移,每一个后面的节点都得如此。

5.QuickList

6.SkipList(跳表)

ziplist和quicklist都是查头尾元素很快,但找中间的元素就很慢需要遍历。

skiplist有点像mysql中的索引,数据挂在索引下面。

6.RedisObject

二.五种数据结构

1.String

1.RAW编码方式

2.EMBSTR编码

3.INT编码

4.总结

2.List

首尾操作。

3.Set(好友共同关注)

4.ZSet(排行榜)

同时具备两种数据结构

功能很强大,太占用内存了。怎么办呢?

5.Hash

相关推荐
虹科网络安全7 小时前
Redis Radar:在统一视图中掌握 Redis 部署、健康与容量
经验分享·redis·艾体宝·艾体宝it·艾体宝redis
大大大大晴天8 小时前
每天认识一个组件:Redis
redis
Alluxio14 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
虹科网络安全18 小时前
Search on Flex:用分层存储承载更大规模的 Redis 搜索索引
经验分享·redis·艾体宝·艾体宝it
青瓦梦滋19 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
Joy T21 小时前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
IT规划师1 天前
Redis 数据类型全解 - Stream 深度:Pending 回收、重试死信与消息队列选型(十一)
redis·.net
虹科网络安全1 天前
RDI 多数据源管道:把分散的数据汇入统一 Redis 数据层
经验分享·redis·艾体宝·艾体宝it·艾体宝redis