LIST 就是有序的列表,可以从左侧或者右侧插入/弹出值,通过偏移量获取特定的元素等功能。以下是基本操作:
推入元素:
1L >>> conn.lpush('list-key', 'first') 2L >>> conn.rpush('list-key', 'new last') 3L
获取子列表:
>>> conn.lrange('list-key', 0, -1)
弹出元素:
>>> conn.lpop('list-key') 'first' >>> conn.lpop('list-key') 'last' >>> conn.lrange('list-key', 0, -1) ['new last']
允许一次推入多个:
4L >>> conn.lrange('list-key', 0, -1) ['new last', 'a', 'b', 'c']
截取列表为指定的那一个部分
True >>> conn.lrange('list-key', 0, -1) ['b', 'c']
从上面的例子可以看出,Redis 的 LIST 操作也支持负便宜,即列表的最右侧的偏移为-1。
对于 LIST,我们最常见的用法应该就是将其作为队列使用,Redis 本身也正好为我们提供了更多有用的方法:
1 >>> conn.rpush('list', 'item2') 2 >>> conn.rpush('list2', 'item3') 1
如上,我们向 list 推入了两个元素,分别为“item1”和“item2”,向 list2 推入了一个元素“item3”。
'item3'
RPOPLPUSH 会弹出源列表中最右侧的元素,将其从左侧推入目标列表并将该元素返回给用户。在上面的例子中,我们实际使用的是 BRPOPLPUSH,这条命令多了个“B” —— block,也就是在源列表为空时发生阻塞。另外,BRPOPLPUSH 接收第三个参数 timeout,如果源列表为空时,BRPOP会等待直至超时,并返回 None:
>>> conn.brpoplpush('list2', 'list', 1)
让我们看一看此时 list 中的所有元素:
['item3', 'item1', 'item2']
BLPOP 和 BRPOP 命令也许更为常用:
('list', 'item3') >>> conn.blpop(['list', 'list2'], 1) ('list', 'item1') >>> conn.blpop(['list', 'list2'], 1) ('list2', 'item2') >>> conn.blpop(['list', 'list2'], 1) >>>