【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

相关推荐
编程彩机6 分钟前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
Moshow郑锴14 分钟前
Spring Boot Data API 与 Redis 集成:KPI/图表/表格查询的缓存优化方案
spring boot·redis·缓存
小马爱打代码17 分钟前
MyBatis:缓存体系设计与避坑大全
java·缓存·mybatis
TracyCoder12338 分钟前
Redis 进阶之路:探秘事务、Lua 与特殊数据结构
数据结构·redis·lua
小毅&Nora1 小时前
# 【后端】【Redis】③ Redis 8队列全解:从“快递分拣站“到“智能配送系统“,一文彻底掌握队列机制
redis·bootstrap·队列
三水不滴1 小时前
SpringBoot+Caffeine+Redis实现多级缓存
spring boot·redis·笔记·缓存
indexsunny1 小时前
互联网大厂Java面试实战:从Spring Boot到Kafka的技术与业务场景解析
java·spring boot·redis·面试·kafka·技术栈·microservices
笨蛋不要掉眼泪2 小时前
Redis持久化解析:RDB和AOF的对比
前端·javascript·redis
Leon-zy11 小时前
Redis7.4.5 主备冗余+哨兵模式部署
redis·哨兵模式·主备模式
打工的小王14 小时前
redis(四)搭建哨兵模式:一主二从三哨兵
数据库·redis·缓存