首页 > 数据库 >Redis几种常用数据类型的数据结构

Redis几种常用数据类型的数据结构

时间:2024-08-28 16:06:32浏览次数:4  
标签:编码 数据类型 ziplist 元素 Redis hashtable 字符串 数据结构

以下是redis-7版本以下适用

string

int编码:当字符串长度小于等于12字节并且字符串可以表示为整数时,Redis会使用int编码。
        这样可以节省内存,并且在执行一些命令时可以直接进行数值计算。
embstr编码:当字符串长度小于等于39字节时,Redis会使用embstr编码。这种编码方式会将
           字符串和存储它的结构体一起分配在内存中,这样可以减少内存碎片和结构体的开销。
raw编码:当字符串长度大于39字节或者字符串不能表示为整数时,Redis会使用raw编码。
         这种编码方式直接将字符串存储在一个结构体中,没有进行任何优化。

hash

ziplist(压缩列表):当Hash类型的元素比较少,且元素的大小比较小(小于64字节)时,Redis采用ziplist作为Hash类型的内部编码。
                   ziplist是一种紧凑的、压缩的列表结构,可以节省内存空间。但是,ziplist只能进行线性查找,不支持快速的随机访问。
hashtable(字典):当Hash类型的元素比较多,或者元素的大小比较大(大于64字节)时,Redis采用hashtable作为Hash类型的内部编码。
                  hashtable是一种基于链表的哈希表结构,可以快速地进行随机访问。但是,hashtable需要占用更多的内存空间。

list

ziplist
        ziplist是一种特殊的编码方式,它可以将小数据量的列表存储在一个连续的内存块中,节省了内存空间,同时还可以提高存取效率。
       ziplist编码的列表最大长度为2^16-1个元素,每个元素可以是字符串类型、整数类型或浮点数类型。在ziplist中,
      每个元素都被存储为一个字节数组,并包含一个前缀和一个后缀,用于标识该元素的类型和长度。

linkedlist
         linkedlist是一种常规的双向链表结构,它可以存储任意长度的列表,并且支持高效的插入和删除操作。在linkedlist中,
         每个节点都包含了一个指向前一个节点和后一个节点的指针,以及一个存储元素数据的指针。
         linkedlist适用于存储大数量的列表,它没有像ziplist那样的内存限制,但是会占用更多的内存空间。

set

intset(整数集合):当Set类型只包含整数类型的数据,并且元素数量较少(小于512个)时,Redis会使用intset作为Set类型的内部编码。
                   intset是一种紧凑的、压缩的整数集合结构,可以节省内存空间,并且支持快速的查找、插入和删除操作。在intset中,
                   所有元素都按照从小到大的顺序排列,并且可以使用不同的编码方式(16位、32位、64位)存储不同大小范围内的整数。
hashtable(字典):当Set类型包含字符串类型或者元素数量较多时,Redis会使用hashtable作为Set类型的内部编码。hashtable是一种基于链表的哈希表结构,
                  可以快速地进行随机访问、插入和删除操作。在hashtable中,每个元素都被存储为一个字符串,并且使用哈希函数将字符串映射到一个桶中,然后在桶中进行查找、插入和删除操作。

zset

ziplist编码:当Zset中元素个数小于128个,并且所有元素的长度都小于64字节时,Redis会使用ziplist编码存储Zset。 
            这种编码方式可以节省内存空间,并且可以提高存取效率,但是不支持随机访问和范围查询。
skiplist编码:当Zset中元素个数大于等于128个,或者有一个元素的长度大于64字节时,Redis会使用skiplist编码存储Zset。
              这种编码方式支持高效的随机访问和范围查询,但是需要占用更多的内存空间。

标签:编码,数据类型,ziplist,元素,Redis,hashtable,字符串,数据结构
From: https://www.cnblogs.com/qcy-blog/p/18384963

相关文章

  • Redis组件介绍(一)
    写在前面今天我们来学习一下Redis。Redis是一个高性能的开源内存数据存储系统,支持多种数据结构,如字符串、列表、集合、有序集合和哈希表。#NoSQL概述随着大数据的兴起,数据量的暴增,数据类型的丰富,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站时已经......
  • 【阅己书城】docker部署MySQL及Redis
    一、MySQL1拉取mysql镜像dockerpullmysql:5.72启动mysql容器--name指定容器名字-v目录挂载-p指定端口映射-e设置mysql参数-d后台运行dockerrun--namemysql-v/mydata/mysql/data:/var/lib/mysql-v/mydata/mysql/conf:/etc/mysql-v/mydata/mysql/log:/var/......
  • redis设置用户名密码
    今天学习redis的相关配置知识,起因来自于华为云服务器未设置用户名密码导致遭受到攻击,所以我要设置一个用户名密码,但是设置命令后出现这样的报错:Jobforredis.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusredis.service"and"j......
  • 数据结构之链表
    C++中常见的数据结构-CSDN博客目录一、链表的定义二、链表的创建三、链表的遍历四、链表的插入五、链表的删除六、总结 链表是计算机科学中常见的一种数据结构,c/c++语言中也有着丰富的链表操作函数库。本文将从链表的定义、创建、遍历、插入、删除等多个方面进行详细......
  • 数据结构学习第一周
    本文需要掌握的知识1.认识数据结构2.了解数据结构(逻辑结构)的分类3.内存储器模型以及分配方式(物理结构)4.认识Node类5.简单了解泛型1.数据结构(D-S/DataStructure)1.1简介1.1.1数据分为原子数据和复合数据1.1.2结构分为逻辑结构和物理结构数据结构是由数据和数据......
  • redis中大key问题的解决思路
    redis中如果某一个key-value值过大,在访问量比较高的时候就可能会造成网络带宽不足,例如一个value值存储大小为5MB,同时有5000个并发访问,网络带宽需要209.7Gbps,这必然会造成网络阻塞。其次redis中是单线程结构如果一个key-value值占用内存过大,传输时占用此线程时间过长,会影响其他数......
  • Java学习笔记9-数据类型的转化
    一.显示转化在Java中,数据类型的转换主要分为两种:自动类型转换(也称为隐式类型转换)和强制类型转换(也称为显式类型转换)。1.自动类型转换(隐式类型转换)自动类型转换是指在赋值或运算过程中,较小的数据类型自动转换为较大的数据类型。Java编译器会自动进行这种转换,不需要程序员显式指......
  • 【数据结构】【模板】李超线段树
    李超线段树定义可以看看洛谷的模板题目:作用优化动态规划,如果可以将一个动态规划的转移式子转化为\(y=kx+b\)的形式,那么我们可以边转移边将\(y=kx+b\)这条线段放入李超线段树,然后在下次转移时,直接调用下次计算出来的\(x\)位置上的最大值或最小值。(结合题目理解......
  • 考研系列-408真题数据结构篇(10-17)
    写在前面此文章是本人在备考过程中408真题数据结构部分(2010年-2017年)的易错题及相应的知识点整理,后期复习也尝尝用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~#2010年1.散列表处理冲突的方法......
  • 【数据结构】关于二叉搜索树,你知道如何实现增删模拟吗???(超详解)
    前言:......