
我们这篇文章开始讲解list类型。
list是一个存储空间保存多个数据,底层使用双向链表存储结构实现的一种Redis数据类型,。list类型一般用在存储多个数据,并需要对数据进入存储空间的顺序进行区分的情况下。list的存储方式是一个存储空间保存多个数据,且可以通过数据可体现出数据进入的顺序。 前面提到了双向链表,那么我们就在这里简单的学一下与双向两边类似的另外两种数据结构顺序表和链表 。

从上图我们可以看出来,顺序表中数据与数据之间是紧密连接的,因此它能很快的检索数据,但是如果要在某个位置插入一个 新的数据就会很耗时,这是因为要插入新数据的位置的数据及其后面所有数据都要后移一位。

上图中的黄色部分是存储的数据,绿色部分是指向下一个数据存储位置的指针。这种结构解决了前面我们提到的顺序表所遇到的问题,每次插入新数据时只需要将上一个数据的指针指向新插入数据的位置,并将下一个数据的位置写入到当前写入数据的指针中。但是这种存储结构也存在问题,因为数据与数据之间的间距不同,因此查询数据会慢一些,并且每个数据都要额外的存储指向下一个数据位置的指针,这就增加了内存的开销。同时再插入数据时,因为要更改插入位置的前一个数据指针指向的位置,因此要遍历内存找到前一个数据并修改指针指向的地址,因此对内存的开销也很大。

双向链表比链表多存储了前一个数据位置的指针(图中紫色部分),它解决了链表插入耗内存的问题。
了解完list的相关知识,我们来看一下list的基本操作指令。
lpush name anna jacklpush car 0 3。如果要获取从起始位置到结尾的全部数据,那么我们可以将stop设置为-1。当然如果只需要获取某个数据我们可以使用lindex,语法是这样的lindex key index,index表示要获取的元素的位置,例如要获取car中的第五个数据,指令这么编写lindex car 4。在开发中有时我们需要获取list中存储的数据的总数,这是我们可以llen指令,语法是llen key。lpop car。这篇文章我们讲解了list类型和list的基本操作。