redis之list类型
在redis中,list类型是一种有序的字符串元素集合。
redis的list和python中的列表类型有一些相似之处,但也有一些不同点
redis列表类型的特点
- 有序性:列表中的元素是按照插入顺序存储的,每个元素都有一个索引位置。
- 允许重复元素:列表中可以包含重复的元素。
- 支持头部和尾部的操作:Redis列表提供了丰富的操作,可以在列表的头部或尾部进行插入、删除、获取元素等操作,这使得它可以用作队列(Queue)或栈(Stack)。
- 支持范围操作:可以对列表进行范围查询,获取列表中指定范围内的元素。
- 基于链表实现:Redis的列表类型是基于链表实现的,这使得在列表的头部和尾部进行插入和删除操作的时间复杂度都是 O(1)。
list类型常用方法
【1】lpush
# 用于在列表的头部插入一个或多个值。
# 1.1 添加一个值
res = conn.lpush('girls', '杨紫') # ['杨紫']
print(res) # 列表长度
# 添加多个值
res = conn.lpush('girls', '虞书欣', '白鹿')
【2】rpush
# 用于在列表的尾部插入一个或多个值。
res = conn.rpush('girls', '杨幂','杨紫')
【3】lpushx
# 用于将值插入到已存在的列表的头部。
# 如果列表不存在,则不执行任何操作。
res = conn.lpushx('girls', '白鹿')
【4】rpushx
# 用于将值插入到已存在的列表尾部。
# 如果列表不存在,则不执行任何操作
res = conn.rpushx('girls', '白鹿') # 存在
【5】llen
# 用于获取列表的长度,即列表中包含的元素数量。
res = conn.llen('girls')
print(res) # 3
【6】linsert
# 用于将一个值插入到列表中另一个值之前或之后。
# 如果指定的参考值不存在,则不执行任何操作。
name:列表名
where:before|after
refvalue:列表中的某个值
value:要插入的值
conn = redis.Redis(decode_responses=True)
res = conn.linsert(name='girls', where='after', refvalue='白鹿', value='虞书欣')
【7】lset
# 用于设置列表中指定索引位置的元素值。
# 超出列表索引值会报错
key:要操作的列表键。
index:要设置值的索引位置,从0开始。
value:要设置的值。
res = conn.lset(name='girls', index=3, value='艾米')
【8】lrem
# 用于从列表中移除指定数量的与给定值相等的元素。
key:要操作的列表键。
count:要移除元素的数量,可以是正数、负数或零。
如果 count > 0:从列表头部开始移除值为 value 的元素,移除数量为 count。
如果 count < 0:从列表尾部开始移除值为 value 的元素,移除数量为 count 的绝对值。
如果 count = 0:移除所有值为 value 的元素。
value:要移除的元素值。
res = conn.lrem(name='girls', count=-1, value='艾米')
【9】lpop
# 用于从列表的头部弹出一个元素,并返回该元素的值。
res = conn.lpop(name='girls')
print(res) # 虞书欣
【10】rpop
# 用于从列表的尾部弹出一个元素,并返回该元素的值。
res = conn.rpop(name='girls')
print(res) # 白鹿
【11】lindex
# 用于获取列表中指定索引位置的元素值。
name:要操作的列表键。
index:要获取元素值的索引位置,从0开始。
res = conn.lindex(name='girls', index=3)
print(res) # 虞书欣
【12】lrange
# 用于获取列表类指定范围的元素
res = conn.lrange(name='girls', start=1, end=3)
print(res) # ['迪丽热巴', '杨紫', '虞书欣']
【13】ltrim
# 用于对列表进行修剪,即保留指定范围内的元素,而删除其他元素。
name:要操作的列表键。
start:起始索引位置,从0开始。
stop:结束索引位置,包含在内。
res = conn.lrange(name='girls', start=1, end=3)
print(res) # ['迪丽热巴', '杨紫', '虞书欣']
【14】rpoplpush
# 用于从一个列表的尾部弹出一个元素,
# 并将它推入到另一个列表的头部。
src:要弹出元素的源列表键。
dst:要推入元素的目标列表键
res = conn.rpoplpush(src='girls', dst='girl2', )
【15】blpop
用于执行阻塞式的列表弹出操作。
这个命令会移除并返回列表的第一个元素,
在列表为空时会等待指定的时间,直到有元素可用或超时结束。
它通常用于需要高效处理类似队列的数据结构的场景。
import redis
# 连接到 Redis 服务器
redis_client = redis.Redis(host='localhost', port=6379, db=0)
# 调用 BLPOP 命令,阻塞等待并弹出名为 key 的列表的第一个元素
# timeout 参数表示在列表为空时等待的最大秒数,如果超时将返回 None
key, value = redis_client.blpop('my_list', timeout=30)
if value is not None:
print(f"从列表 {key} 中弹出了值: {value.decode('utf-8')}")
else:
print("列表为空,已超时")