8. Redis 数据类型-list

 

list类型是用来存储多个有序字符串,一个列表最多可以存储2的32次方-1.

(1)常用命令

8. Redis 数据类型-list

8. Redis 数据类型-list

8. Redis 数据类型-list 

8. Redis 数据类型-list 

8. Redis 数据类型-list

8. Redis 数据类型-list 

8. Redis 数据类型-list

8. Redis 数据类型-list 

  • lpush rpush lpop rpop:从头部尾部插入数据,弹出数据。
  • lpushx rpushx 插入数据的时候判断key是否存在,如果不存在就不进行任何操作。
  • 8. Redis 数据类型-list
  • blpop brpop 阻塞的进行弹出操作。以blpop为例,当给定列表内没有任何元素可供弹出的时候,连接将被 BLPOP 命令阻塞,直到等待超时或发现可弹出元素为止。当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。不同的客户端被放进一个队列中,按『先阻塞先服务』(first-BLPOP,first-served)的顺序为 key 执行 BLPOP 命令。
  • lrange 获取数据,索引从0-N-1:lrange key start end
  • llen 判断数据量
  • lset 修改指定索引下标的元素:lset key index newvalue
  • lindex 获取列表指定索引下标的元素:lindex key index
  • linsert 在pivot元素的前面或后面插入参数中的元素value:

8. Redis 数据类型-list

linsert key BEFORE|AFTER pivot value

8. Redis 数据类型-list 

8. Redis 数据类型-list 

  • ltrim仅保留指定范围内的元素:ltrim key start stop
  • lrem 删除前count个值等于value的元素。如果count大于0,从头向尾遍历并删除,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素:lrem key count value
  • Rpoprpush
  • brpoplpush 从某list弹出数据并且push到另外的list。b..只是阻塞式的操作。

(2)内部编码

redis 3.2之前:

  • ziplist: list elements < list-max-ziplist-entries(512 by default) 
  • linkedlist: 无法满足ziplist的条件时。

redis 3.2 新加了quicklist来作为list的底层实现。

quicklist是由ziplist组成的双向链表,链表中的每一个节点都以压缩列表ziplist的结构保存着数据,而ziplist有多个entry节点,保存着数据。相当与一个quicklist节点保存的是一片数据,而不再是一个数据。