BLOG
Enjoy when you can, and endure when you must.
OCT 17, 2013/数据库
学习笔记:Redis入门之数据类型 —— LIST

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)
>>>
COMMENTS
LEAVE COMMNT