说一下redis中5种数据类型的底层数据结构
前言:
阅读 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种数据类型的底层数据结构的更多相关文章
- Redis中几种数据类型的基本操作指令
Redis基本指令 单线程+多路IO复用技术 1. Key 指令 作用 keys * 查看当前库所有键 exists <key> 判断此键是否存在 type <key> 查看键 ...
- Redis 中 5 种数据结构的使用场景介绍
这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis ...
- Redis中的Stream数据类型作为消息队列的尝试
Redis的List数据类型作为消息队列,已经比较合适了,但存在一些不足,比如只能独立消费,订阅发布又无法支持数据的持久化,相对前两者,Redis Stream作为消息队列的使用更为有优势. 相信 ...
- 面试官:Redis中哈希数据类型的内部实现方式是什么?
面试官:Redis中基本的数据类型有哪些? 我:Redis的基本数据类型有:字符串(string).哈希(hash).列表(list).集合(set).有序集合(zset). 面试官:哈希数据类型的内 ...
- java中8种数据类型和默认值所占字节数
java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...
- Redis: Redis支持五种数据类型
ylbtech-Redis: Redis支持五种数据类型 Redis支持五种数据类型:string(字符串) ,hash(哈希),list(列表),set(集合)及zset(sorted set:有序 ...
- Redis中3种特殊的数据类型(BitMap、Geo和HyperLogLog)
前言 Reids 在 Web 应用的开发中使用非常广泛,几乎所有的后端技术都会有涉及到 Redis 的使用.Redis 种除了常见的字符串 String.字典 Hash.列表 List.集合 Set. ...
- Redis中7种集合类型应用场景&redis常用命令
Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部 ...
- Redis 的 5 种数据类型的基本使用
Redis 中的 5 种数据类型 Redis 中 有 5 种数据结构,分别是 "字符串/string","列表/list","集合/set" ...
随机推荐
- 51 Nod 1116 K进制下的大数
1116 K进制下的大数 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数 ...
- HDU4135 Co-prime
题目链接:Click here Solution: 简单容斥,我们先把\(N\)分解质因数,我们知道\(1\sim x\)里能整除\(i\)的数的个数为\(\lfloor \frac{x}{i} \r ...
- apt-get build-dep命令详解
apt-get build-dep命令详解 - 星星之火的Blog - CSDN博客 https://blog.csdn.net/starflame/article/details/7416311 ...
- flask 第八篇 实例化flask时的参数配置
Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...
- Xcode使用介绍之一:Xcode简介+创建App应用
一.Xcode简介 Xcode是苹果官方的集成开发环境IDE,开发者可以使用其开发基于iPhone,iPad,Apple Watch以及Mac平台的应用.Xcode具有如下特点: 一站式开发工具.所有 ...
- 安装vncserver, vncviewer--远程桌面
1 问题如下 /etc/sysconfig/vncservers---配置文件作用去掉最后两行的注释 no route to host 是防火墙的原因---必须得研究好防火墙 本地可以vnc,本地 ...
- laravel 框架接入环信遇到的坑(-)
在脚本中执行判断user表中是否注册环信时,报错: “请求错误:service_resource_not_found Service resource not found ” // 判断环信是否已经 ...
- [转]spring的filter中targetFilterLifecycle作用
在web.xml中进行配置,对所有的URL请求进行过滤,就像"击鼓传花"一样,链式处理. 配置分为两种A和B. A:普通配置 在web.xml中增加如下内容:<filter& ...
- 远程管理控制ssh
传统的网络服务程序,FTP.POP.telnet 本质上都是不安全的,因为它们在网络上通过明文传送口令和数据,这些数据非常容易被截获.SSH叫做Secure Shell.通过SSH,可以把传输数据进行 ...
- MEF部件的生命周期(PartCreationPolicy)
一.演示概述 本演示介绍了MEF的生命周期管理,重点介绍了导出部件的三种创建策略,分别是:CreationPolicy.Any.CreationPolicy.Shared.CreationPolicy ...