Loading

redis之list类型

在redis中,list类型是一种有序的字符串元素集合。

redis的list和python中的列表类型有一些相似之处,但也有一些不同点

redis列表类型的特点

  1. 有序性:列表中的元素是按照插入顺序存储的,每个元素都有一个索引位置。
  2. 允许重复元素:列表中可以包含重复的元素。
  3. 支持头部和尾部的操作:Redis列表提供了丰富的操作,可以在列表的头部或尾部进行插入、删除、获取元素等操作,这使得它可以用作队列(Queue)或栈(Stack)。
  4. 支持范围操作:可以对列表进行范围查询,获取列表中指定范围内的元素。
  5. 基于链表实现: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("列表为空,已超时")
posted @ 2024-05-15 20:29  HuangQiaoqi  阅读(10)  评论(0编辑  收藏  举报