前言:

阅读 redis设计与实现 一书的记录。未完待续。。。

redis我们都知道有5种数据类型,分别是string,list,hash,set,zset,那么你知道它们的底层数据结构实现吗?

redis底层有6种数据结构,分别是简单动态字符串(SDS),链表,字典,跳跃表,整数集合,压缩列表。

每种数据类型都有着2种以上的数据结构实现,在不同状态下会进行数据结构的转换。现在来看看这6种数据结构是什么吧!

1.简单动态字符串(SDS)

2.链表

3.字典

其中渐进式hash能有效解决重新分配hash表带来的服务器停顿问题,不一次性把所有的数据迁移到新的hash表上,而是每次增加,删除,修改后把一个index上的所有数据移动到新hash表中。

过程如下:

4.跳跃表

每个节点的生成都会随机产生1到32个层,来给前面的节点来”跳跃“

5.整数集合

当编码方式不足以应对过大的整数时,会调整编码方式,把在整数集合里的数的编码调整为新的编码方式,再把需要加入的大整数加入进来。编码方式只能升级不能降级。

6.压缩列表

压缩链表由于保留了前面节点的长度和最后节点的位置,能够有效的向后遍历,但不足之处就是调整了一个节点的大小可能会形成羊群效应,因为节点保留了前面节点的长度,大小改变时,后面节点需要做出相应调整。

第二部分,各个数据类型的数据结构

说一下redis中5种数据类型的底层数据结构的更多相关文章

  1. Redis中几种数据类型的基本操作指令

    Redis基本指令 单线程+多路IO复用技术 1. Key 指令 作用 keys * 查看当前库所有键 exists <key> 判断此键是否存在 type <key> 查看键 ...

  2. Redis 中 5 种数据结构的使用场景介绍

    这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis ...

  3. Redis中的Stream数据类型作为消息队列的尝试

    Redis的List数据类型作为消息队列,已经比较合适了,但存在一些不足,比如只能独立消费,订阅发布又无法支持数据的持久化,相对前两者,Redis Stream作为消息队列的使用更为有优势.   相信 ...

  4. 面试官:Redis中哈希数据类型的内部实现方式是什么?

    面试官:Redis中基本的数据类型有哪些? 我:Redis的基本数据类型有:字符串(string).哈希(hash).列表(list).集合(set).有序集合(zset). 面试官:哈希数据类型的内 ...

  5. java中8种数据类型和默认值所占字节数

    java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...

  6. Redis: Redis支持五种数据类型

    ylbtech-Redis: Redis支持五种数据类型 Redis支持五种数据类型:string(字符串) ,hash(哈希),list(列表),set(集合)及zset(sorted set:有序 ...

  7. Redis中3种特殊的数据类型(BitMap、Geo和HyperLogLog)

    前言 Reids 在 Web 应用的开发中使用非常广泛,几乎所有的后端技术都会有涉及到 Redis 的使用.Redis 种除了常见的字符串 String.字典 Hash.列表 List.集合 Set. ...

  8. Redis中7种集合类型应用场景&redis常用命令

    Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部 ...

  9. Redis 的 5 种数据类型的基本使用

    Redis 中的 5 种数据类型 Redis 中 有 5 种数据结构,分别是 "字符串/string","列表/list","集合/set" ...

随机推荐

  1. 你知道 GNU Binutils 吗?【binutils】

    概述 从事 Linux 开发的朋友们都不可避免地用到一些工具,比如 objcopy.nm.objdump.readelf 等等.其实这一系列的工具,就是所谓的 Binutils,当然 GNU 就表示它 ...

  2. Spring Boot教程(三十四)使用Redis数据库(2)

    除了String类型,实战中我们还经常会在Redis中存储对象,这时候我们就会想是否可以使用类似RedisTemplate<String, User>来初始化并进行操作.但是Spring ...

  3. Rabbitmq的高级特性

    消息如何保证100%投递成功? 什么是生产端的可靠性投递? 1.保障消息的成功发出 2.保障MQ节点的成功接收 3.发送端收到MQ节点(Broker)确认应答 4.完善的消息补偿机制 BAT互联网大厂 ...

  4. Teamviewer解决许可证授权的问题

    提交商业用途表 https://www.teamviewer.com/zhCN/pricing/commercial-use/

  5. flask 第七篇 路由系统

    Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST" ...

  6. 卷boot仅剩余XX空间

    参见: https://blog.csdn.net/hnzcdy/article/details/52381844

  7. 查重复出现的字段 SQL

    select * from a where (select count(b.abc) from b where b.abc=a.abc)>1 一般treeview datagridview 都要 ...

  8. java 斐波那契数列

    package feibo; public class Feibo { static int ss = 50; public static void main(String[] args) { // ...

  9. 深度学习之NLP维基百科数据模型

    知识点 """ 1) from gensim.model import Word2Vec import jieba 2) opencc :将繁体字转换为简体字 转换命令: ...

  10. Sql UpdateOrInsert

    SqlServer(先更新,受影响条数为0,则Insert,通过事务): begin tran update table set column=columnvalue where wherestr b ...