- 2024-10-22Redis Quicklist 竟让内存占用狂降50%?
0引言Redis作为一种高效的内存型键值数据库,得益于其底层数据结构的精妙设计。对于List类型的数据,Redis从早期的简单链表(linkedlist),到压缩列表(ziplist),再到如今的quicklist和listpack,不断优化以平衡内存利用率和性能。这篇文章将深入剖析Redis的quicklist和listpack
- 2024-10-11Redis原理篇 之数据结构
Redis原理篇之数据结构文章目录Redis原理篇之数据结构1动态字符串SDS1.1SDS介绍1.2SDS扩容1.3SDS优点2IntSet2.1IntSet介绍2.2IntSet升级2.3总结3Dict3.1Dict的原理3.2Dict的扩容3.3Dict的收缩3.4Dict的rehash3.5总结4ZipList4.1ZipList原理4.2Zi
- 2024-09-20redis主从配置启动(1主2从)
一、安装redis略二、主节点配置文件daemonizeyespidfile/usr/local/redis/logs/redis_6379.pidport6379tcp-backlog1024bind0.0.0.0timeout0tcp-keepalive60loglevelnoticelogfile"/usr/local/redis/logs/redis_6379.log"databases16save""sav
- 2024-09-19Redis数据结构跳跃列表(skipList)与压缩列表(ziplist)
skiplist介绍跳表是一种数据结构,它使得包含了n个元素的有序序列的查找和插入的平均时间复杂度都是O(logn),优于数组的O(n)复杂度,快速的查找是通过维护多层次的链表实现的,且与前一层(下面一层)链表的数量相比,每一层的链表元素数量更少简单来讲跳表就是基于链表实现的有序列表,通过维
- 2024-09-19Redis基础数据结构之 quicklist 和 listpack 源码解读
目录标题quicklist为什么要设计quicklist?quicklist特点ziplistquicklist数据结构listpacklistpack是什么?listpack数据结构ziplist干啥去了?为什么有listpack?什么是ziplist的连锁更新?listpack如何避免连锁更新?listpack替代了quicklist吗?quicklist为什么要设计qu
- 2024-08-28Redis几种常用数据类型的数据结构
以下是redis-7版本以下适用stringint编码:当字符串长度小于等于12字节并且字符串可以表示为整数时,Redis会使用int编码。这样可以节省内存,并且在执行一些命令时可以直接进行数值计算。embstr编码:当字符串长度小于等于39字节时,Redis会使用embstr编码。这种编码方式会将
- 2024-08-16Redis介绍
Redis一、介绍1.1基本了解RemoteDictionaryServer(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、
- 2024-08-15Redis数据结构ZipList详解、ZipList的连锁更新问题
ZipListZipList是一种特殊的“双端链表”,由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1)。属性类型长度用途zlbytesuint32_t4字节记录整个压缩列表占用的内存字节数zltailuint32_t4字节记录压缩列表表尾节点距离压
- 2024-08-01docker 安装 redis
1、拉取redisdockerpullredis2、配置redis路径mkdir-p/data/redis/confmkdir-p/data/redis/data#配置redis.conf#bind192.168.1.10010.0.0.1#bind127.0.0.1::1#bind127.0.0.1protected-modenoport6379tcp-backlog511requirepass000415timeout0tcp-keepal
- 2024-07-01Redis的键与值简述
键值对分别是啥子?Redis键值对均为对象键——字符串对象值——各种对象——及其底层编码 值:可以是字符串、列表、哈希、集合、有序集合对象。五者之一。底层数据结构该图是值——各对象——底层数据结构。值的底层数据结构对应值--五对象之一 ==>
- 2024-06-22Redis中集合的底层实现原理
Redis中对于Set类型的底层实现,直接采用了hashTable。但对于Hash、ZSet、List集合的底层实现进行了特殊的设计,使其保证了Redis的高性能。 对于Hash与ZSet集合,其底层的实现实际有两种:压缩列表zipList,与跳跃列表skipList。这两种实现对于用户来
- 2024-06-20压缩列表(ziplist)
压缩列表(ziplist):ziplist是列表键和哈希键的底层实现之一当一个列表键只包含少量列表项,并且每个列表项要么是小整数或者短字符串,那么redis会使用ziplist来做列表键的实现当一个哈希键只包含少量键值对,且每个键值对的键和值要么是小整数或短字符串,那么redis会使用ziplist来
- 2024-06-01Redis笔记——底层数据结构之压缩列表
是什么? 本质上就是紧凑的列表。 压缩列表在Redis中有两种编码方式,分别是ZIPLIST与LISTTPACK。LISTPACK从Redis5.0引入,直至Redis7.0完全替换了ZIPLIST,可以看作是ZIPLIST的进阶版。有什么作用? 在List文章中,提
- 2024-03-06redis自学(12)Hash
HashHash结构与Redis中的Zset非常类似:l 都是键值存储l 都需要根据键获取值l 键必须唯一区别如下:l zset的键是member,值是score;hash的键和值都是任意值l zset要根据score排序,hash则无需排序因此,Hash底层采用的编码与Zset也基本一致,只需要把排序有关的SkipList去掉即
- 2024-03-01redis自学(9)List
ListRedis的List类型可以从首、尾操作列表中的元素: 哪一个数据结构能满足上述特征? LinkedList:普通链表,可以从双端访问,内存占用较高,内存碎片较多 ZipList:压缩列表,可以从双端访问,内存占用低,存储上限低 QuickList:LinkedList+ZipList,可以从双端访问,内存占用较低,
- 2024-02-26redis自学(5)QuickList
问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办?为了缓解这个问题,我们必须限制ZipList的长度和entry大小。问题2:但是我们要存储大量数据,超出了ZipList最佳的上限怎么办?我们可以创建多个ZipList来分片存储数据。问题3:数据拆分后比
- 2024-02-26redis-深入分析redis之listpack,取代ziplist?
ziplist的不足主要在于当ziplist中元素个数过多,它的查找效率就会降低。而且如果在ziplist里新增或修改数据,ziplist占用的内存空间还需要重新分配;更糟糕的是,ziplist新增某个元素或修改某个元素时,可能会导致后续元素的prevlen占用空间都发生变化,从而引起连锁更新问题,导致
- 2024-02-23redis自学(4)ZipList
ZipList是一种特殊的“双端链表”,由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1)。 ZipListEntryZipList中的Entry并不像普通链表那样记录前后节点的指针,因为记录两个指针要占用16个字节,浪费内存。而是采用了下
- 2023-12-23redis_原理
redis_原理数据结构1.动态字符串SDSC语言字符串存在的问题:获取字符串长度需要通过运算非二进制安全不可修改redis构建了一种新的字符串结构,简单动态字符串SimpleDynamicStringSDSRedis是C语言实现的,其中SDS是一个结构体,属性包括:uint8_tlen:buf已保存的字符串字节数
- 2023-12-13Redis数据结构4:REDIS_ZIPLIST
REDIS_ZIPLISTzipList(压缩列表)是一种紧凑型的数据结构,占用一片连续的内存,本质上是一个字节数组。能提高CPU缓存的利用效率,并且针对不同数据结构进行不同编码,节省内存开销。编码结构zipList的字节数组主要由5个部分组成:zlbytes、zltail、zllen、zltail和entry。zlbytes记录
- 2023-11-12常见面试题-Redis底层的SDS、ZipList、ListPack
Redis的SDS了解吗?答:Redis创建了SDS(simpledynamicstring)的抽象类型作为String的默认实现SDS的结构如下:structsdshdr{//字节数组,用于保存字符串charbuf[];//buf[]中已使用字节数量,称为SDS的长度intlen;//buf[]中尚未使用的字节数量intfree;}
- 2023-11-08Redis配置文件详解
Redis的配置文件redis.conf过滤掉空行和注释行,总共有49个可控项。1daemonizeno默认情况下,redis不是后台运行,如果需要后台运行,把该项的值改为yes。2pidfile当Redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis服务时,需
- 2023-11-03安装单击redis
1. #安装依赖2. yuminstall-ywgetgcc*3. #创建目录4. mkdir/htdocs/redis-p5. #下载软件包6. cd/tmp7. wget-chttp://test.e-bidding.org/gxdownload/redis-2.8.24.tar.gz#解压tarxfredis-2.8.24.tar.gz#将解压目录的内容移动到/htdocs/redismvredis-2.8
- 2023-10-08Redis——底层和数据结构
数据结构简单动态字符串SDS可以认为在Redis中所有的东西最终都是字符串。Redis是C语言实现的,但是Redis没有直接使用C语言中的字符串,C语言字符串是字符数组实现的,存在很多问题:1、获取字符串的长度需要运算,时间复杂度达到O(n)。2、非二进制安全,无法保存\0字符(被识别成结束标识)
- 2023-10-01Redis数据结构
本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。前言本文主要介绍关于Redis的五种基本数据结构的底层实现原理,然后来分析我们常用的使用场景。先简单回顾一下知识点。Redis是一个开源(BSD许可)的,内存中的数据结