上一篇文章: Python--Redis实战:第三章:Redis命令:第一节:字符串
下一篇文章: Python--Redis实战:第三章:Redis命令:第三节:集合
在以前咱们介绍过,Redis的列表容许用户从序列的两端推入或者弹出元素、获取列表元素、以及执行各类常见的列表操做。除此以外,列表还能够用来存储任务信息、最近浏览过的文章、经常使用联系人信息。redis
本节将对列表这个由多个字符串组成的有序序列结构进行介绍,并展现一些最经常使用的列表处理命令。segmentfault
下表展现了经常使用的列表命令:spa
命令 | 用例 | 用例描述 |
---|---|---|
rpush | rpush key-name value [value ...] | 将一个或多个值推入列表的右端 |
lpush | lpush key-namr value [value ...] | 将一个或多个值推入列表的左端 |
rpop | rpop key-name | 移除并返回列表最右端的元素 |
lpop | lpop key-name | 移除并返回列表最左端的元素 |
lindex | lindex key-name offset | 返回列表中偏移量为offset的元素 |
lrange | lrange key-name start end | 返回列表从start偏移量到end偏移量范围内的全部元素,其中偏移量为start和偏移量为end的元素也会包含在被返回的元素以内。 |
ltrim | ltrim key-name start end | 对列表进行修剪,只保留从strat偏移量到end偏移量范围内的元素,其中偏移量为start何偏移量为end的元素也会被保留。 |
以前已经对列表的几个推入和弹出操做进行了简单的介绍,因此咱们应该不会对上面的命令陌生。code
import redis #导入redis包包 #与本地redis进行连接,地址为:localhost,端口号为6379 r=redis.StrictRedis(host='localhost',port=6379) r.delete('list-key') #推入操做完成以后会返回列表当前的长度 #从语义上来讲,列表的左端为开头,右端为结尾 print(r.rpush('list-key','last')) print(r.lpush('list-key','first')) print(r.rpush('list-key','new last')) print(r.lrange('list-key',0,-1)) #经过重复的弹出列表左端的元素,能够按照从左到右的顺序来获取列表中的元素 print(r.lpop('list-key')) print(r.lpop('list-key')) print(r.lrange('list-key',0,-1)) #能够同时推入多个元素 print(r.lpush('list-key','a','b','c')) print(r.lrange('list-key',0,-1)) #能够从列表的左端、右端或者左右两端删减任意数量的元素 print(r.ltrim('list-key',2,-1)) print(r.lrange('list-key',0,-1))
运行结果:blog
1 2 3 [b'first', b'last', b'new last'] b'first' b'last' [b'new last'] 4 [b'c', b'b', b'a', b'new last'] True [b'a', b'new last']
这个实例里面第一次使用到了ltrim命令,聚合使用ltrim和lrange能够构建出一个在功能上相似于lpop或rpop,可是却可以一次返回并弹出多个元素的操做。本章稍后将会介绍【原子地】执行多个命令的方法,而更高级的Redis事务特性则会在下一章介绍。队列
在Redis里面,多个命令原子地执行指的是:在这些命令正在读取或者修改数据的时候,其余客户端不能读取或者修改相同的数据。
有几个列表命令能够将元素从一个列表移动到另外一个列表,或者阻塞【block】执行命令的客户端直到有其余客户端给列表添加元素为止,这些命令以前都没有介绍过,下表列出了这些阻塞弹出命令和元素移动命令:图片
命令 | 用例 | 用例描述 |
---|---|---|
blpop | blpop key-name [key-name ...] timeout | 从第一个非空列表中弹出位于最左端的元素,或者在timeout秒以内阻塞并等待可弹出的元素出现。 |
brpop | brpop key-name [key-name ...] timeout | 从第一个非空列表中弹出位于最右端的元素,或者在timeout秒以内阻塞并等待可弹出的元素出现。 |
rpoplpush | rpoplpush source-key dest-key | 从source-key列表中弹出位于最右端的元素,而后将这个元素推入dest-key列表的最左端,并向用户返回这个元素。 |
brpoplpush | brpoplpush source-key dest-key timeout | 从source-key列表中弹出位于最右端的元素,而后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;若是source-key为空,那么在timeout秒以内阻塞并等待可弹出的元素出现。 |
import redis #导入redis包包 #与本地redis进行连接,地址为:localhost,端口号为6379 r=redis.StrictRedis(host='localhost',port=6379) r.delete('list-key1') r.delete('list-key2') #将一些元素添加到两个列表里面 print(r.rpush('list-key1','item1')) print(r.rpush('list-key1','item2')) print(r.rpush('list-key2','item3')) #将一个元素从一个列表移动到另外一个列表,并返回被移动的元素 print(r.brpoplpush('list-key2','list-key1',1)) #当列表不包含任何元素时,阻塞弹出操做会在给定的期限内等待可弹出的元素出现,并在时限到达后返回None print(r.brpoplpush('list-key2','list-key1',1)) print(r.lrange('list-key1',0,-1)) print(r.lrange('list-key2',0,-1)) #blpop命令会从左到右地检查传入到列表,并对最早遇到的非空列表执行弹出操做 print(r.blpop(['list-key1','list-key2'],1)) print(r.blpop(['list-key1','list-key2'],1)) print(r.blpop(['list-key1','list-key2'],1))
运行结果:事务
对于阻塞弹出命令和弹出并推入命令,最多见的用例就是消息传递【messaging】和任务队列【task queue】,这将在后面讲解。字符串
列表的一个主要优势在于它能够包含多个字符串值,这使得用户能够将数据集中在同一个地方。Redis的集合也提供了与列表相似的特性,但集合中能保存各不相同的元素。接下来的一节中就让我妈来看看不能保存相同元素的集合都能作些什么?get
上一篇文章: Python--Redis实战:第三章:Redis命令:第一节:字符串
下一篇文章: Python--Redis实战:第三章:Redis命令:第三节:集合