当前位置: 首页 > article >正文

【Redis】List类型的常用命令大全

这里的list列表相当于一个双端队列,也可以认为是双向链表,也可以认为是数组,后续的很多命令都使用到下标。

list的特点:

  • list中的每个元素也都是String类型
  • 里面的元素可以重复
  • 列表中的元素是有序的,如果里面元素顺序进行调换就不是原来的List
1.常用命令大全

以下命令,l和r组成的相对命令,分别表示left和right的意思。如果是l单独存在,则说明是list的意思。区间范围都是闭区间,并且坚持负数下标。

操作类型命令时间复杂度
左边添加lpush key value [value … ]
O(k),k 是元素个数
右边添加rpush key value [value … ]
O(k),k 是元素个数
指定位置添加linsert key before | after pivot value
O(n),n是pivot距离头尾的距离
范围查找lrange key start end
O(s+n),s是start偏移量,
n是start到end的范围
下标查找lindex key indexO(n),n 是索引的偏移量
求长度llen keyO(1)
左边删除lpop keyO(1)
右边删除rpop key
O(1)
指定删除lrem key count value
O(k),k 是元素个数
范围删除ltrim key start end
O(k),k 是元素个数
指定修改lset key index valueO(n),n 是索引的偏移量
阻塞操作blpop keyO(1)
阻塞操作brpop key
O(1)
2.命令使用解析

(1)lpush与rpush

这里的l与r分别表示left和right的意思,分别代表头插和尾插的意思

  • lpush

1)语法:lpush key element [element … ]

2)含义:将一个或者多个元素从左侧放入(头插)到list中(key不存在时,创建新的key;存在时,逐个头插)

3)时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

 

按顺序进行头插 

  • lpushx

1)语法:lpushnx key element [element … ]

2)含义:lpush的进化版,若key不存在时直接返回,key存在时才进行头插操作

3)时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

  • rpush

1)语法:rpush key element [element … ]

2)含义:将一个或者多个元素从右侧放入(尾插)到list中,

3)时间复杂度:只插入一个元素为O(1),插入多个元素为O(N),N为插入元素个数

逐个进行尾插 

  • rpushx

1)语法:lpushnx key element [element … ]

2)含义:rpush的进化版,若key不存在时直接返回,key存在时才进行头插操作

3)时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

(2)lrange

1)语法:lrange key start stop

2)含义:获取区间范围[start,stop]内的所有元素,支持负数下标

3)时间复杂度:O(N)

范围[0,-1]表示整个list 

如果范围超过list范围,会尽量返回。比如list长度为10,当求0-100时,就会返回0-10范围的元素。

(3)lpop与rpop

  • lpop

1)语法:lpop key

2)含义:从list左侧取出元素(头删),并且拿到值,类似队列的弹出元素;list为空返回nil

3)时间复杂度:O(1)

把list最左侧元素删除并且获得该值 

  • rpop

1)语法:rpop key

2)含义:从list右侧取出元素(尾删),并且拿到值,类似队列的弹出元素;list为空返回nil

3)时间复杂度:O(1)

(4)lindex

1)语法:lindex key index

2)含义:从左侧开始数起,获取第index位置的元素

3)时间复杂度:O(N),N是起始位置的偏移量

4)返回值:插入后list的长度

下标从0位置开始,下标不符合则返回nil 

(5)linsert

1)语法:linsert key <before | after> pivot element

2)含义:在特定位置插入元素(before和after必须二选一)。pivot是基准元素,不是下标

3)时间复杂度:O(N)

4)返回值:插入后list的长度

(6)llen

1)语法:llen key

2)含义:获取key对应list的长度

3)时间复杂度:O(1)

(7)lrem

rem属于remove的缩写

1)语法:lrem key count value

2)含义:删除count个value元素,直到删除完为止

3)时间复杂度:O(k),K为删除元素个数

count三个取值代表不同的意思

  • >0,从左到右删除count个值为value的元素
  • <0,从右到左删除count个值为value的元素
  • =0,删除所有值为value的元素

(8)ltrim

1)语法:ltrim key start end

2)含义:保留范围[start,end]的元素,删除范围外的所有元素

3)时间复杂度:O(k),k是元素个数

(9)lset

1)语法:lset key index element

2)含义:根据下标修改元素。index为下标,element为修改后的元素

3)时间复杂度:O(n),n是索引的偏移量

(10)blpop与brpop

  1. 这两个是带有阻塞操作的命令
  2. 可以同时等待多个key列表的元素,哪一个列表先有元素则先进行获取
  3. 也可以对同一个list进行多个pop操作 

主要介绍blpop,剩下的一样 

  • blpop

1)语法:blpop key [key2 … ] timeout

2)含义:带有阻塞效果的头删操作。当list为null时阻塞等待,也可以指定等待时间

3)时间复杂度:O(1)

4)返回值:返回二元组,一个表示来自哪一个key,一个表示删掉的值

操作非空列表:和lpop一样

操作空的列表:这个时候会阻塞等待超时时间,直接列表有元素或者时间过期

 

同时等待多个key:

  • brpop

1)语法:brpop key

2)含义:带有阻塞效果的尾删操作。当list为null时阻塞等待,也可以指定等待时间

3)时间复杂度:O(1)

3.编码方式与应用场景

(1)list内部编码方式

现在list主要采取quicklist的编码方式,也就是结合了ziplist和linkedlist两种。

整体是一个linkedlist,链表的每个节点采用ziplist的方式

(2)应用场景

list中带有两个阻塞命令blpop与brpop,因此主要用来作为分频道阻塞消息队列模型


http://www.kler.cn/news/339914.html

相关文章:

  • WordPress修改固定链接后301的重定向方法
  • 使用root账号ssh登录虚拟机ubuntu
  • 算法(最大异或对)
  • 《Python 安装指南:开启编程之旅》
  • 项目完整开发的流程
  • 安装 Anaconda
  • Python 从入门到实战34(实例2:绘制蟒蛇)
  • yolov8-pose的TensorRT动态库部署(C++)
  • 【VUE】怎么实现虚拟dom 和实际dom 的分离和衔接
  • 算法灰度膨胀腐蚀算子优化方法
  • No.11 笔记 | PHP学习指南:从函数到面向对象概览
  • YOLOv11模型地址
  • 图解大模型LLM学习路径:清晰易懂的学习指南,非常详细收藏我这一篇就够了
  • Word转pdf
  • sql注入第8关
  • vscode配置:启用括号对着色
  • 软件工程相关
  • 使用 Python 批量修改文件夹中文件名称
  • mongodb导入导出
  • Linux基础命令netstat详解