[Redis] list底层的数据结构

前面我们使用list实现过队列,现在就来看一下list的底层结构

list有两种实现方式:

1. 压缩链表

压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。重点是内存连续

2.双端链表

prev和next两个指针,重点是可以从前往后也可以从后往前,这就可以实现lpush rpush这些指令了

 

因为用的链表,所以这也就导致了lindex指令,获取某个索引值的元素,需要遍历链表才可以获取到,时间复杂度是 O(n)

 

当列表对象可以同时满足下列两个条件时,列表对象采用压缩链表编码:

(1)列表对象保存的所有字符串元素的长度都小于64字节;

(2)列表元素保存的元素数量小于512个;

以上两个条件的上限值可以在配置文件修改 list-max-ziplist-value选项和 list-max-ziplist-entries选项

否则采用双端链表编码

 

redis3.2版本以后采用的快速列表

quicklist 是一个双向链表,并且是一个ziplist的双向链表,也就是说quicklist的每个节点都是一个ziplist。结合了两者的优点

相关文章

一,安装: 1.1.将redis压缩包放到 /opt 下。 2.解压 3.进入目录执行 make 4.执行 make install 5.在 /...
1.我们使用缓存时的业务流程大概为: 当我们查询一条数据时,先去查询缓存,如果缓存有就直接返回,如果...
1、redis主从 1.1、redis主从复制过程 - Slave 与 master 建立连接,发送 sync 同步命令 - Master 会启...
1、集群的概念 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模...
1、什么是 NoSQL? NoSQL(NoSQL = Not Only SQL ),意为反 SQL 运动,是一项全新的数据库革命性运动,2...
Redis 是一个支持持久化的内存数据库,也就是说需要经常将内存中的数据同步到硬盘来保证持久化。 1、RD...