Redis
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
1、增加
List
基本命令:
lpush(key,values) # 从左边增加
rpush(key,values) # 从右边增加
在key
对应的list
中添加元素,每个新的元素都添加到列表的最左边(最右边)如:
import redis
import time
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
# 从左边增加
r.lpush("list1", 11, 22, 33)
print(r.lrange('list1', 0, -1))
# 保存顺序为: 33,22,11
# 从右边增加
r.rpush("list2", 11, 22, 33) # 表示从右向左操作
print(r.llen("list2")) # 列表长度
print(r.lrange("list2", 0, 3)) # 切片取出值,范围是索引号0-3
2、往已经有的key
的列表的左边/右边添加元素–没有的话无法创建
lpushx(key, value)
rpushx(key, value)
在key
对应的list
中添加元素,只有key
已经存在时,值添加到列表的最左边/最右边
示例:
r.lpushx("list10", 10) # 这里list10不存在
print(r.llen("list10")) # 0
print(r.lrange("list10", 0, -1)) # []
r.lpushx("list2", 77) # 这里"list2"之前已经存在,往列表最左边添加一个元素,一次只能添加一个
print(r.llen("list2")) # 列表长度
print(r.lrange("list2", 0, -1)) # 切片取出值,范围是索引号0到-1(最后一个元素
r.rpushx("list2", 99) # 这里"foo_list1"之前已经存在,往列表最右边添加一个元素,一次只能添加一个
print(r.llen("list2")) # 列表长度
print(r.lrange("list2", 0, -1)) # 切片取出值,范围是索引号0到-1(最后一个元素)
3、新增(固定索引号位置插入元素)
linsert(key, where, refvalue, value))
在key
对应的列表的某一个值前或后插入一个新值
参数:
-
key
:redis
的key
-
where
:BEFORE
或AFTER
-
refvalue
:标杆值,即:在它前后插入数据 -
value
:要插入的数据
示例:
r.linsert("list2", "before", "11", "00") # 往列表中左边第一个出现的元素"11"前插入元素"00"
print(r.lrange("list2", 0, -1)) # 切片取出值,范围是索引号0-最后一个元素
4、修改(指定索引号进行修改)
r.lset(key, index, value)
对key
对应的list
中的某一个索引位置重新赋值
参数:
-
key
:redis
的key
-
index
:list
的索引位置 -
value
:要设置的值
示例:
r.lset("list2", 0, -11) # 把索引号是0的元素修改成-11
print(r.lrange("list2", 0, -1))
5、删除(指定值进行删除)
r.lrem(key, value, num)
在key
对应的list
中删除指定的值
参数:
-
key
:redis
的key
-
value
:要删除的值 -
num
:num=0
,删除列表中所有的指定值;num=2
,从前到后,删除2个;num=1
,从前到后,删除左边第1个num=-2
,从后向前,删除2个
示例:
r.lrem("list2", "11", 1) # 将列表中左边第一次出现的"11"删除
print(r.lrange("list2", 0, -1))
r.lrem("list2", "99", -1) # 将列表中右边第一次出现的"99"删除
print(r.lrange("list2", 0, -1))
r.lrem("list2", "22", 0) # 将列表中所有的"22"删除
print(r.lrange("list2", 0, -1))
6、删除并返回
lpop(key) # 从左边删除并返回
rpop(key) # 从右边删除并返回
在key
对应的列表的左侧/右侧获取第一个元素并在列表中移除,返回值则是第一个元素
示例:
r.lpop("list2") # 删除列表最左边的元素,并且返回删除的元素
print(r.lrange("list2", 0, -1))
r.rpop("list2") # 删除列表最右边的元素,并且返回删除的元素
print(r.lrange("list2", 0, -1))
7、删除索引之外的值
ltrim(key, start, end)
在key
对应的列表中移除没有在start-end
索引之间的值
参数:
-
key
:redis
的key
-
start
:索引的起始位置 -
end
:索引结束位置
示例:
r.ltrim("list2", 0, 2) # 删除索引号是0-2之外的元素,值保留索引号是0-2的元素
print(r.lrange("list2", 0, -1))
8、取值(根据索引号取值)
lindex(key, index)
在key
对应的列表中根据索引获取列表元素
print(r.lindex("list2", 0)) # 取出索引号是0的值
9、移动 – 元素从一个列表移动到另外一个列表
rpoplpush(src, dst) #从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边
brpoplpush(src, dst, timeout=0) #从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧
参数:
-
src
:取出并要移除元素的列表对应的key
-
dst
:要插入元素的列表对应的key
-
timeout
:当src
对应的列表中没有数据时,阻塞等待其有数据的超时时间(秒),0 表示永远阻塞
示例:
r.rpoplpush("list1", "list2")
print(r.lrange("list2", 0, -1))
r.brpoplpush("list1", "list2", timeout=2)
print(r.lrange("list2", 0, -1))