Python3操作Redis List列表常用命令详解与实例
本文详细介绍Python3中操作Redis List列表的常用命令,包括LPUSH、RPUSH、LRANGE、LPOP、RPOP等核心API的使用方法与参数说明。通过具体的代码实例演示了列表的增删改查、阻塞操作及元素插入删除等常见场景,帮助开发者快速掌握Redis列表在Python中的应用。
若尚未安装Redis服务,请参考相关安装教程完成环境配置。
接下来,我们将梳理Python3中操作Redis列表所支持的主要命令。
- lrange(key, start, stop)
- lpush(key, value)
- rpush(key, value)
- lpop(key)
- rpop(key)
- blpop(key)
- brpop(key)
- brpoplpush(source, destination, timeout)
- lindex(key, index)
- linsert(key, before|after, pivot, value)
- llen(key)
- lpushx(key)
- lrem(key, value, count)
- lset(key, index, value)
- ltrim(key, start, stop)
- rpoplpush(source, destination)
- rpushx(key, value)
以下为具体命令的详细解释与代码实现:
① lrange(key, start, stop)
该命令用于获取列表key中指定区间内的元素,区间范围由start和stop参数定义。下标索引从0开始,即0代表列表第一个元素,1代表第二个元素,依此类推。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.lpush("0",1,2,3,4)
print(r.lrange("0" , 0 , -1))
② lpush(key, value)
此命令将一个或多个值value插入到列表key的表头。若提供多个value值,它们将按从左到右的顺序依次插入表头。如果key不存在,系统将创建一个空列表并执行LPUSH操作;若key存在但不是列表类型,则返回错误。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.lpush("1",1)
print(r.lrange("1" , 0 , -1)) #打印列表"1"的全部内容
r.lpush("1",1,2,3,4)
print(r.lrange("1" , 0 , -1))
③ rpush(key, value)
该命令将一个或多个值value插入到列表key的表尾(最右侧)。若存在多个value值,它们按从左到右的顺序依次插入表尾。如果key不存在,将创建空列表并执行RPUSH操作;若key存在但非列表类型,则返回错误。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("2",1)
print(r.lrange("2" , 0 , -1)) #打印列表"2"的全部内容
r.rpush("2",1,2,3,4)
print(r.lrange("2" , 0 , -1))
④ lpop(key)
该命令移除并返回列表key的头元素。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.lpush("3",1,2,3,4)
print(r.lrange("3" , 0 , -1)) #打印列表"3"的全部内容
r.lpop("3")
print(r.lrange("3" , 0 , -1))
⑤ rpop(key)
该命令移除并返回列表key的尾元素。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.lpush("4",1,2,3,4)
print(r.lrange("4" , 0 , -1)) #打印列表"4"的全部内容
r.rpop("4")
print(r.lrange("4" , 0 , -1))
⑥ blpop(key)
BLPOP命令移出并获取列表的第一个元素。若列表为空,命令将阻塞直到等待超时或可弹出元素出现。若列表为空返回None;否则返回包含两个元素的列表,第一个元素为被弹出元素所属的key,第二个元素为被弹出元素的值。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("6",1,2,3,4,4,5,6)
print(r.blpop("6"))
print(r.blpop("6"))
print(r.blpop("6"))
print(r.blpop("100" , timeout=2))#因为键 100 不存在,所以2秒后输出的结果是None
print(r.lrange("6" , 0 , -1)) #打印列表"6"的全部内容
⑦ brpop(key)
BRPOP命令移出并获取列表的最后一个元素。若列表为空,命令将阻塞直到等待超时或可弹出元素出现。若在指定时间内无元素弹出,返回None及等待时长;否则返回包含两个元素的列表,第一个元素为被弹出元素所属的key,第二个元素为被弹出元素的值。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("7",1,2,3,4,5,6,)
print(r.lrange("7" , 0 , -1)) #打印列表"7"的全部内容
print(r.brpop("7"))
print(r.brpop("7"))
print(r.brpop("7"))
print(r.brpop("101",timeout=2)) #因为键 101 不存在,所以2秒后输出的结果是None
print(r.lrange("7" , 0 , -1)) #打印列表"7"的全部内容
⑧ brpoplpush(source, destination, timeout)
该命令从源列表中弹出一个值,将其插入到目标列表并返回。若列表为空,命令将阻塞直到等待超时或可弹出元素出现。若在指定时间内无元素弹出,返回None及等待时长;否则返回包含两个元素的列表,第一个元素为被弹出元素的值,第二个元素为等待时长。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("8",1,2,3)
r.rpush("88",4,5,6)
print(r.lrange("8" , 0 , -1)) #打印列表"8"的全部内容
print(r.lrange("88" , 0 , -1)) #打印列表"88"的全部内容
print(r.brpoplpush(src="8",dst="88",timeout=2)) #输出的结果是3
print(r.brpoplpush(src="44",dst="22",timeout=2)) #键44 不存在,输出的结果是None
print(r.lrange("8" , 0 , -1)) #打印列表"8"的全部内容
print(r.lrange("88" , 0 , -1)) #打印列表"88"的全部内容
⑨ lindex(key, index)
通过索引获取列表中的元素。支持使用负数下标,其中-1表示列表的最后一个元素。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("9",1,2,3)
print(r.lrange("9" , 0 , -1)) #打印列表"8"的全部内容
print(r.lindex("9",0)) #输出的结果是1
print(r.lindex("9",1)) #输出的结果是2
print(r.lindex("9",2)) #输出的结果是3
print(r.lindex("9",3)) #输出的结果是None
print(r.lindex("9",-1)) #输出的结果是3
print(r.lrange("9" , 0 , -1)) #打印列表"8"的全部内容
⑩ linsert(key, before|after, pivot, value)
该命令用于在列表指定元素的前面或后面插入新元素。若指定元素不存在于列表中,则不执行任何操作;若列表不存在,视为空列表,同样不执行操作。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("10",1,2,3)
print(r.lrange("10" , 0 , -1)) #打印列表"10"的全部内容
r.linsert("10" , "BEFORE" , "2" , 10)
print(r.lrange("10" , 0 , -1)) #结果 ['1', '10', '2', '3']
r.rpush("100",1,2,3)
r.linsert("100" , "AFTER" , "2" , 10)
print(r.lrange("100" , 0 , -1)) #结果 ['1', '2', '10', '3']
①① llen(key)
返回列表的长度。若列表key不存在,将其解释为空列表并返回0;若key不是列表类型,则返回错误。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("11",1,2,3)
print(r.lrange("11" , 0 , -1)) #打印列表"11"的全部内容
print(r.llen("11")) #结果是 3
①② lpushx(key)
该命令将一个或多个值插入到已存在的列表头部。与LPUSH不同,若列表不存在,LPUSHX操作无效且不会创建列表。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("12" , 1,2,3)
r.rpush("122" , 1,2,3)
print(r.lrange("12" , 0 , -1)) #结果为 ['1', '2', '3']
print(r.lrange("122" , 0 , -1)) #结果为 ['1', '2', '3']
r.lpush("123" , 1)
r.lpushx("1223" , 1)
print(r.lrange("123" , 0 , -1)) #结果为 ['1']
print(r.lrange("1223" , 0 , -1)) #结果为 []
①③ lrem(key, value, count)
根据参数count的值,移除列表中与value相等的元素。count取值规则如下:count > 0时,从表头向表尾搜索,移除数量为count的元素;count < 0时,从表尾向表头搜索,移除数量为count绝对值的元素;count = 0时,移除所有与value相等的元素。命令返回被移除元素的数量,若列表不存在则返回0。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("13" , 'a','b','b','c','d','b')
print(r.lrange("13" , 0 , -1)) #结果为['a', 'b', 'b', 'c', 'd', 'b']
r.lrem("13" , "b" , 2)
print(r.lrange("13" , 0 , -1)) #结果为['a', 'c', 'd', 'b']
r.rpush("133" , 'a','b','b','c','d','b')
print(r.lrange("133" , 0 , -1)) #结果为['a', 'b', 'b', 'c', 'd', 'b']
r.lrem("133" , "b" , -2)
print(r.lrange("133" , 0 , -1)) #结果为['a', 'b', 'c', 'd']
①④ lset(key, index, value)
将列表key下标为index的元素值设置为value。若index超出范围,或对空列表(key不存在)执行LSET,则返回错误。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("14" , 1,2,3,4)
print(r.lrange("14" , 0 , -1)) #打印列表"14"的全部内容
r.lset("14",1,9)
print(r.lrange("14" , 0 , -1)) #结果为 ['1', '9', '3', '4']
①⑤ ltrim(key, start, stop)
对列表进行修剪,仅保留指定区间内的元素,区间外的元素将被删除。例如,执行LTRIM list 0 2表示只保留列表list的前三个元素。下标索引从0开始,0代表第一个元素,1代表第二个元素。支持使用负数下标,-1表示最后一个元素,-2表示倒数第二个元素。若key不是列表类型,则返回错误。
①⑥ rpoplpush(source, destination)
该命令将列表source中的最后一个元素(尾元素)弹出并返回给客户端,随后将该元素插入到列表destination作为其头元素。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("16",1,2,3)
r.rpush("166",4,5,6)
print(r.lrange("16" , 0 , -1)) # ['1', '2', '3']
print(r.lrange("166" , 0 , -1)) # ['4', '5', '6']
print(r.rpoplpush(src="16",dst="166")) #输出的结果是3
print(r.lrange("16" , 0 , -1)) # ['1', '2']
print(r.lrange("166" , 0 , -1)) # ['3', '4', '5', '6']
①⑦ rpushx(key, value)
该命令将值value插入到列表key的表尾,但仅当key存在且为列表类型时生效。与RPUSH相反,若key不存在,RPUSHX命令不执行任何操作。
import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
# for i in range(10):
# r.lpop("17")
# r.lpop("177")
# r.lpop("1777")
r.rpush("17" , 1,2,3)
r.rpush("177" , 1,2,3)
print(r.lrange("17" , 0 , -1)) #结果为 ['1', '2', '3']
print(r.lrange("177" , 0 , -1)) #结果为 ['1', '2', '3']
r.rpush("177" , 4)
r.rpushx("1777" , 4)
print(r.lrange("177" , 0 , -1)) #结果为 ['1', '2', '3', '4']
print(r.lrange("1777" , 0 , -1)) #结果为 []
完整代码地址:https://github.com/dangsh/pythonPra/blob/master/redisGit/redisTest.py
本文介绍了Python3操作Redis List列表的相关实例,更多Python3操作Redis List的内容请查阅本站过往文章或继续关注后续更新,感谢支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









