首页 > 数据库 >redis之list类型

redis之list类型

时间:2024-05-15 20:43:56浏览次数:26  
标签:girls list 元素 redis value 列表 res 类型 conn

在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("列表为空,已超时")

标签:girls,list,元素,redis,value,列表,res,类型,conn
From: https://www.cnblogs.com/Hqqqq/p/18194652

相关文章

  • Redis总结
    【一】redis基础【二】python连接redis【三】Redis连接池【四】redis之字符串【五】redis之哈希类型【六】redis之list类型【七】redis通用操作【八】django中使用redis......
  • Redis连接池
    【一】Redis连接池的优点​ Redis连接池的存在主要是为了优化Redis客户端和Redis服务器之间的连接管理,提升性能和稳定性。具体而言,Redis连接池具有以下几个优点:提升响应速度:由于连接池中已经存在可用的连接,客户端可以快速获取连接并执行操作,而不需要等待新的连接建立过程。这......
  • redis基础
    redis介绍Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis与其他key-value缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供l......
  • python操作redis
    redis安装:https://github.com/tporadowski/redis/releases/一python操作redis1普通链接pipinstallredisimportredisconn=redis.Redis(host="localhost",port=6379,db=0,password=None)conn.set('name','lqz')con......
  • django中使用redis
    django中使用redis方式一:通用方式pool.pyimportredisPOOL=redis.ConnectionPool(max_connections=10,decode_responses=True)在哪里用,导入用即可fromutils.poolimportPOOLimportredisclassRedisView(ViewSet):deflist(self,request):conn=......
  • list
    文档链接list与vectorlist优点list头部、中间插入不再需要挪动数据插入数据是新增节点,不需要增容缺点不支持随机访问vector优点支持下标的随机访问,间接的就很好的支持排序、二分查找、堆算法等缺点头部和中间插入删除效率低插入数据时空间不够需要增容......
  • C#十六进制转成byte类型
    在C#中,可以使用Convert.ToByte方法将十六进制的字符串转换成byte类型。以下是一个简单的例子:  stringhexValue="A3";//示例十六进制字符串bytebyteValue=Convert.ToByte(hexValue,16);//转换成byte如果你有一个十六进制的字符串数组或者单个十六进制......
  • ArrayList和LinkedList区别
    底层数据结构ArrayList是动态数组的数据结构实现。LinkedList是双向链表的数据结构实现。效率下标査询ArrayList按照下标査询的时间复杂度O(1)。LinkedList不支持下标查询。查找(未知索引)ArrayList需要遍历,链表也需要链表,时间复杂度都是O(n)。新增和删除ArrayL......
  • Java把List集合转成树形结构
     代码如下:privatestatic<T,K>List<T>listToTree(List<T>list,Predicate<T>isTop,Function<?superT,?extendsK>getId,Function<?superT,?extendsK>getParentId,BiConsumer<T,List<T>>setChilds){......
  • Spring源码分析:List集合注入
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://ma......