1,介绍

  单键多值

  redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到表的头部或尾部

双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差

2,常用命令

  lpush/rpush  <key>    <value>   <value1>   <value2> ...   从左边/右边插入一个或多个值

  lpop/rpop    <key>   从左边/右边弹出一个值,值在健在,值亡键亡

  rpoplpush    <key1>    <key2>  从key1列表右边吐出一个值,插入到key2的左边

 

  lrange     <key>    <start>    <stop>   按照索引下标获取元素  (从左到右)(-1代表右边第一个)

  lindex    <key>     <index> 按照索引下标获取元素(从左到右)

  llen     <key>   获取列表长度

  linsert   <key>    before/after   <value>  <newvalue>  在value前插入newvalue这个值

  lrem   <key>  <n>  <value>  从左边删除n个value

  lset   <key>  <index>  <value>    将列表 key  下标为 index 的值替换成 value

 

3,数据结构

  List的数据结构是快速链表quickList

  首先在列表元素较少的情况下,会使用一块连续的内存储存,这个结构是zipList,即也是压缩列表

  它将所有的元素紧挨着储存,分配的是一块连续的内存

  当数据量较大时才会改成quickList  (多个zipList连起来)

  因为普通的链表需要的附加指针空间较大,会比较浪费空间,

  比如,列表内只存int数据,但还是需要额外的prev和next指针

 

  Redis 链表和zipList结合起来组成quickList,也就是将多个zipList使用双向指针串联起来使用。

  这样既满足了快速的插入删除性能,又不会出现太大的冗余空间。