redis--list列表---linklist

1. list

  redis的list分为两种结构,linklist(链表)和ziplist(压缩列表)

2.什么时候使用使用linklist

  当list元素个数多,或者元素内容长度大的时候采用linklist

3.linklist结构

  node结构

    typedef struct listNode {
      struct listNode *prev;
      struct listNode *next;
      void *value;
    }listNode;

  链表结构(双端链表)

    typedef struct list {
      listNode *head; //头节点
      listNode *tail; //尾节点
      void *(*dup)(void *ptr); //节点复制函数
      void *(*free)(void * ptr); //节点释放函数
      int (*match)(void * ptr, void *key); //节点对比函数
      unsigned long len; //链表长度
     }list;

4.特性

  a. 双端:链表具有前置节点和后置节点的引用,获取这两个时间复杂度都为O(1)

  b. 无环:表头节点的prev指针和表尾节点的next指针都指向null,对链表的访问都是以null结束

  c. 带链表长度计数器:通过len属性获取链表长度的时间复杂度为O(1)

  d. 多态:链表节点用void* 指针来保存节点值,可以保存不同类型的值

5. 结构图解

 

6. list的命令

  a. blpop

    blpop list1 [list2] timeout  移出并获取列表的第一个元素,如果列表没有元素会阻塞列表知道等待超时或发现可弹出元素为止

  b. brpop

    brpop list1[list2] timeout  移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表知道等待超时或发现可弹出元素为止

  c. lindex

    lindex list index  通过索引获取列表中的元素

  d. linsert

    linsert list before|after pivot value  在列表的pivot元素前或者后插入元素

  e. llen

    llen list  获取列表长度

  f. lpop

    lpop list  移出并获取列表的第一个元素,如果list不存在元素则返回nil(类似null)

  g. lpush

    lpush list value1[value2]  将一个或者多个值插入到列表的头部,返回列表的长度

  h. lpushx

    lpushx list value  将一个值插入到已存在的列表头部,返回列表的长度

  i. lrange

    lrange list start end  返回区间以偏移量start和end指定的元素。其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

  j. lrem

    lrem list count value   移出列表元素,根据count的值,移除列表中与参数value相等的值。count>0,从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT ;count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值;count = 0 : 移除表中所有与 VALUE 相等的值。

    返回:被移除元素的数量。 列表不存在时返回 0 。

  k. lset

    lset list index value  通过索引设置列表元素的值。当索引参数超出范围,或对一个空列表进行lset时,返回一个错误,操作成功返回OK

  l. ltrim

    ltrim list start end   对一个列表进行修剪。让列表只保留指定区间内的元素,不在指定区间则被删除。成功返回OK

  m. rpop

    rpop list  移出列表的最后一个元素,返回值为移除的元素

  n. rpoplpush

    rpoplpush source destination  移除列表的最后一个元素,并将该元素添加到另一个列表并返回,返回被弹出的元素

  o. rpush

    rpush list value1 [value2]  在列表中添加一个或多个值

  p. rpushx

    rpushx list value  为已存在的列表添加值

posted @ 2020-06-03 16:34  zjmbk  Views(238)  Comments(0)    收藏  举报