首页 > 数据库 >redis自学(5)QuickList

redis自学(5)QuickList

时间:2024-02-26 15:44:42浏览次数:22  
标签:压缩 QuickList ZipList redis 内存 占用 自学 节点

问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办?

为了缓解这个问题,我们必须限制ZipList的长度和entry大小。

问题2:但是我们要存储大量数据,超出了ZipList最佳的上限怎么办?

我们可以创建多个ZipList来分片存储数据。

问题3:数据拆分后比较分散,不方便管理和查找,这多个ZipList如何建立联系?

Redis在3.2版本引入了新的数据结构QuickList,它是一个双端链表,只不过链表中的每个节点都是一个ZipList。

 

 

为了避免QuickList中的每个ZipList中的entry过多,Redis提供了一个配置项:list-max-ziplist-size来限制。

 如果值为正,则代表ZipList的允许的entry个数的最大值。

 如果值为负,则代表ZipList的最大内存大小,分5中情况:

  -1:每个ZipList的内存占用不能超过4kb

  -2:每个ZipList的内存占用不能超过8kb

  -3:每个ZipList的内存占用不能超过16kb

  -4:每个ZipList的内存占用不能超过32kb

  -5:每个ZipList的内存占用不能超过64kb

其默认值为-2:

 

 

除了控制ZipList的大小,QuickList还可以对节点的ZipList做压缩。通过配置项list-compress-depth来控制。因为链表一般都是从首尾访问较多,所以首尾不压缩的。这个参数是控制首尾不压缩的节点个数:

0:特殊值,代表不压缩

1:表示QuickList的首尾各有1个节点不压缩,中间节点压缩

2:表示QuickList的首尾各有2个节点不压缩,中间节点压缩

以此类推

默认值:0

QuickList的结构

QuickListNode的结构

QuickList内存结构图

 

 

标签:压缩,QuickList,ZipList,redis,内存,占用,自学,节点
From: https://www.cnblogs.com/bulesea/p/18034472

相关文章

  • redis常见的五种类型
    https://www.cnblogs.com/xkqwy/p/16353029.html 总结1.string类型写命令通过set关键字实现,set[key][value]读命令通过get关键字实现,get[key]2.list列表类型通过rpush、lpush,将一个或多个值向右或向左推入。rpush[key][value1][value2],将value值推入到列表的右端......
  • Redis扩展数据类型&命令
    StreamRedisStream是Redis5.0版本引入的一种新的数据类型,它是一个持久化的、可查询的、可扩展的消息队列服务。Stream类型的数据结构类似于一个日志系统,数据被添加到Stream的末尾,并且每个数据都会被分配一个唯一的序列号,这个序列号是按照时间顺序递增的。主体队列:Stre......
  • 在Docker中设置Redis的密码
    目录1,介绍2,实现“DockerRedis设置密码”的整体流程3,具体实现步骤4,结论1,介绍Docker是一个开源的应用容器引擎,可以自动化部署、扩展应用程序。它可以帮助开发人员将应用程序及其依赖项打包到一个可移植的容器中,然后在任何环境中运行。Redis是一个开源的内存数据结构存储系统,它可以......
  • redis-深入分析redis之listpack,取代ziplist?
    ziplist的不足主要在于当ziplist中元素个数过多,它的查找效率就会降低。而且如果在ziplist里新增或修改数据,ziplist占用的内存空间还需要重新分配;更糟糕的是,ziplist新增某个元素或修改某个元素时,可能会导致后续元素的prevlen占用空间都发生变化,从而引起连锁更新问题,导致......
  • Redis 教程
    Redis教程Redis概述Redis(RemoteDictionaryServer),即远程字典服务。是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把......
  • 解决Redis和数据库一致问题
    昨天面试了一家公司,简历上我写了用redis做缓存,当面试官问到,当有用户修改了信息,怎么做到缓存的信息和数据库一致呢,当时或许是紧张或许是真不知道,还是脑子短路了,就没回答出来。面试完和我舍友提到的时候,慢慢就想起以前看到过类似的解决方法:那就是当用户的信息有更新的时候就进行缓......
  • SpringBoot + Redis 的配置及使用
    一、SpringBoot配置Redis1.1pom引入spring-boot-starter-data-redis包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></......
  • 揭秘一线大厂Redis面试高频考点(3万字长文、吐血整理)
    ###3万+长文揭秘一线大厂Redis面试高频考点,整理不易,求一键三连:点赞、分享、收藏本文,已收录于,我的技术网站aijiangsir.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享1、说说什么是Redis?Redis是一个开源的、基于内存的高性能键值对数据库,支持多种类型的数据结构,如字符......
  • 前端上传到阿里云步骤 安装redis
    前端:1.输入命令会生成一个src文件 2.上传有两个方法:①下载一个xftp5软件   接受并保存上传只需从左往右拖过去即可,在pycharm中会出现一个dist文件    把这个文件夹内包含的文件删除 第②种: scp-r表示连着文件夹一起上传scp表示只上传文件 ~表示+......
  • Redis事务的概念及相关命令的使用
    在数据处理的世界里,事务(Transaction)是一个不可或缺的概念。它们确保了在一系列操作中,要么所有的操作都成功执行,要么都不执行。这就像是一个“全有或全无”的规则,保证了数据的一致性和完整性。今天,我们就来聊聊Redis事务的使用,看看如何通过它来提升我们的数据操作效率和安全性。......