Redis数据类型之List类型

news/2024/11/8 14:01:00/

文章目录

  • 简介
  • 常用命令
    • 赋值语法
      • LPUSH
      • RPUSH
      • LPUSHX
      • RPUSHX
    • 取值语法
      • LLEN
      • LINDEX
      • LRANGE
    • 删除语法
      • LPOP
      • RPOP
      • BLPOP
      • BRPOP
      • LTRIM
      • LREM
    • 修改语法
      • LSET
      • LINSERT
  • 高级命令
    • RPOPLPUSH
  • 应用场景

简介

List类型是一个链表结构的集合,其主要功能有push,pop,获取元素等,更详细的说,List类型是一个双端链表的结构,我们可以通过相关的操作进行集合的头部或者尾部添加或删除元素,List的设计非常灵巧,既可以作为栈,也可以作为队列,满足大多数要求。

按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含2的32次方-1(每个列表超过40亿个元素),类似于JAVA的LinkedList

常用命令

赋值语法

LPUSH

LPUSH KEY value1 [value2] 

将一个或多个值插入到列表头部(**从左侧添加**

127.0.0.1:6379> lpush list 0 1 2 3 4 5
(integer) 6
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "0"

RPUSH

RPUSH KEY value [value2]

往列表中添加一个或多个值(从右侧添加

127.0.0.1:6379> rpush list2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

LPUSHX

LPUSHX KEY value1 

将一个值插入到已存在列表的头部如果列表不存在,操作无效

127.0.0.1:6379> keys *
1) "list2"
2) "list"
127.0.0.1:6379> LPUSHX  s 1
(integer) 0
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "0"
127.0.0.1:6379> lpushx list 6
(integer) 7
127.0.0.1:6379> lrange list 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "0"

RPUSHX

RPUSHX KEY value1 

将一个值插入到已存在列表的尾部如果列表不存在,操作无效

取值语法

LLEN

LLEN KEY

获取列表长度

127.0.0.1:6379> llen list
(integer) 7

LINDEX

LINDEX key index

通过索引获取列表中的元素(从上到下

127.0.0.1:6379> lrange list 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "0"
127.0.0.1:6379> lindex list 0
"6"

LRANGE

LRANGE key start stop

获取列表指定范围的元素
在这里插入图片描述

127.0.0.1:6379> lrange list 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "0"

删除语法

LPOP

LPOP KEY

移出并获取列表的第一个元素(从左侧删除)

127.0.0.1:6379> LRANGE list 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "0"
127.0.0.1:6379> lpop list
"6"
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "0"

RPOP

RPOP KEY

移出列表的最后一个元素,返回值为移除的元素(从右侧删除)

127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "0"
127.0.0.1:6379> rpop list
"0"
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

BLPOP

BLPOP KEY  timeout 

移除并获取列表第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

127.0.0.1:6379> blpop l2 1
(nil)
(1.01s)

在以上实列中,操作被会阻塞,如果直到列表l2中存在数据则会返回第一个元素,否则会等待1秒后返回nil

BRPOP

BRPOP KEY timeout

移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

LTRIM

LTRIM key start stop

对一个列表进行修剪,让列表只保留指定区间内的元素,不在指定区间之内的元素都被删除

127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> ltrim list 1 3
OK
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"

LREM

LREM KEY

删除N个value值。

127.0.0.1:6379> rpush list3 1 1 1 2 2 3 3 3 3 4 3
(integer) 11
127.0.0.1:6379> lrange list3 0 -11) "1"2) "1"3) "1"4) "2"5) "2"6) "3"7) "3"8) "3"9) "3"
10) "4"
11) "3"
127.0.0.1:6379> lrem list3 2 2
(integer) 2
127.0.0.1:6379> lrange list3 0 -1
1) "1"
2) "1"
3) "1"
4) "3"
5) "3"
6) "3"
7) "3"
8) "4"
9) "3"

修改语法

LSET

LSET KEY index value

通过索引设置列表元素的值

127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
127.0.0.1:6379> lset list 0 0
OK
127.0.0.1:6379> lrange list 0 -1
1) "0"
2) "3"

LINSERT

LINSERT KEY BEFORE|AFTER  world value

在列表的元素前或者后插入元素,描述:将值value插入到列表key当中,位于world的之前或者之后

127.0.0.1:6379> lrange list 0 -1
1) "0"
2) "3"
127.0.0.1:6379> LINSERT list before 3 2
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "0"
2) "2"
3) "3"

高级命令

RPOPLPUSH

RPOPLPUSH source destination

移除列表的最后一个元素,并将该元素添加到另一个列表左侧并返回

127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpoplpush list1 list2
"1"
127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "a"
3) "b"
4) "c"

实例描述:

  • RPOPLPUSH a1 a2 :集合a1的最后元素移到a2的左侧
  • RPOPLPUSH a1 a1 :循环列表,将最后元素移到左侧
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "3"
127.0.0.1:6379>  rpoplpush list1 list1
"3"
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
  • BRPOPLPUSH source destination timeout :从列表中弹出一个值,将弹出的元素插入到另一个列表中并返回他,如果列表没有元素会阻塞列表直到等待超时或者发现可弹出元素为止

应用场景

在这里插入图片描述


http://www.ppmy.cn/news/1209136.html

相关文章

C#开发的OpenRA游戏之游戏设计思路

OpenRA设计思路 在OpenRA有很多部分的内容,比如UI、渲染、单元行为等等。 不过在地图里,所有单元、建筑物、其它物品都是采用Actor来实现。每个Actor包含一系列Trait属性。 Trait属性有info类和同名称操作类构成。有一个信息类实例在同一类型的所有参与者之间共享。每个Act…

页表和cache

页表基本原理 页表主要用来将虚拟地址映射到物理地址,在使用虚拟地址访问内存时,微处理器首先将虚拟地址拆分成页号和页内偏移量,然后使用页号在页表中查找对应的物理页框号,将物理页地址加上页内偏移量,得到最终的物…

ClickHouse介绍和使用

ClickHouse介绍和使用 1. 简介2. ClickHouse特点3. 数据类型3.1. 整型3.2. 浮点型3.3. Decimal型3.4. 布尔型3.5. 字符串3.6. 枚举类型3.7. 时间类型 4. 表引擎4.1. TinyLog4.2. Memory4.3. MergeTree4.3.1. partition by分区(可选)4.3.2. primary key 主…

技术分享 | Appium 用例录制

下载及安装 下载地址: github.com/appium/appi… 下载对应系统的 Appium 版本,安装完成之后,点击 “Start Server”,就启动了 Appium Server。 在启动成功页面点击右上角的放大镜,进入到创建 Session 页面。配置好…

解析邮件文本内容; Mime文本解析; MimeStreamParser; multipart解析

原始文本 ------_Part_46705_715015081.1699589700255 Content-Type: text/html;charsetUTF-8 Content-Transfer-Encoding: base64PGh0bWwCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBodHRwLW VxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRt bDsgY2hhcnNldD1VVEYtOCICiAgICAgIC…

后端Java日常实习生面试(2023年11月10日)

面试岗位为:Java 后端开发实习生 面试时长:30分钟 面试时间:2023年11月10日 首先介绍一下项目吧 这里介绍时有一个失误,没有主动把屏幕共享给打开,因为我在面试之前已经在 processon 上画好了项目的流程图&#xf…

【Git企业开发】第六节.配置 Git和标签管理

文章目录 前言一、配置 Git 1.1 忽略特殊文件 1.2 给命令配置别名二、标签管理 2.1 理解标签 2.2 创建标签 2.3 操作标签 总结 前言 一、配置 Git 1.1 忽略特殊文件 在日常开发中,我们有些文件不想或者不应该提交到远端,…

网格变形算法

网格变形 需求分析技术分析 需求分析 根据几何模型上的几个特征点,对几何模型进行变形。比如 技术分析 把几何模型使用三角面片表示,然后通过网格映射变形进行实现。关于网格这块有本经典的书可以参考,《ploygon mesh processing》。上面…