第二章:API 的理解和使用-列表

2019-07-29  本文已影响0人  super_pcm

2.4 列表

列表(list)类型是用来存储多个有序的字符串,如下图所示,a、b、c、d、e五个元素从左到右组成了一个有序的列表,列表中的每个字符串称为元素(element),一个列表最多可以存储232-1个元素。在Redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景。


列表两端插入和弹出操作

列表类型有两个特点:第一、列表中的元素是有序的,这就意味着可以通过索引下标获取某个元素或者某个范围内的元素列表,例如要获取上图图的第5个元素,可以执行lindex user:1:message 4(索引从0算起)就可以得到元素e。第二、列表中的元素可以是重复。
这两个特点在后面介绍集合和有序集合后,会显得更加突出,因此在考虑是否使用该数据结构前,首先需要弄清楚列表数据结构的特点。

2.4.1 命令

下面按照增、查、删、改、阻塞的顺序来介绍列表的命令

  1. 添加操作
rpush key value [value ...]
lpush key value [value ...]
linsert key before|after pivot value
  1. 查找
lrange key start end

lrange操作会获取列表指定索引范围所有的元素。索引下标有两个特点:第一,索引下标从左到右分别是0到N-1,但是从右到左分别是-1到-N。第二,lrange中的end选项包含了自身,这个和很多编程语言不包含end不太相同,例如想获取列表的第2到第4个元素,可以执行如下操作:

lrange listkey 1 3
lindex key index
llen key
  1. 删除
lpop key

元素弹出之后就不在列表上了

rpop key
lrem key count value

lrem命令会从列表中找到等于value的元素进行删除,根据count的不同
分为三种情况:
·count>0,从左到右,删除最多count个元素。
·count<0,从右到左,删除最多count绝对值个元素。
·count=0,删除所有。

ltrim key start end
  1. 修改
lset key index newValue
  1. 阻塞操作
blpop key [key ...] timeout
brpop key [key ...] timeout

blpop和brpop是lpop和rpop的阻塞版本,它们除了弹出方向不同,使用方法基本相同,所以下面以brpop命令进行说明,brpop命令包含两个参数:
·key[key...]:多个列表的键。
·timeout:阻塞时间(单位:秒)。
在列表为空的时候:如果timeout=3,那么客户端要等到3秒后返回,如果timeout=0,那么客户端一直阻塞等下去。这种情况是不是很容易想到消息队列呢?

2.4.2 内部编码

列表类型的内部编码有两种:ziplist(压缩列表)和linkedlist(链表)。
同哈希的内部编码,在元素个数较小的时候会使用ziplist编码,否则使用linkedlist。
2.4.3 使用场景

上一篇 下一篇

猜你喜欢

热点阅读