Redis数据类型之List类型

文章目录

简介

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

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

常用命令

赋值语法

LPUSH

bash 复制代码
LPUSH KEY value1 [value2] 

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

bash 复制代码
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

bash 复制代码
RPUSH KEY value [value2]

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

bash 复制代码
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

bash 复制代码
LPUSHX KEY value1 

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

bash 复制代码
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

bash 复制代码
RPUSHX KEY value1 

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

取值语法

LLEN

bash 复制代码
LLEN KEY

获取列表长度

bash 复制代码
127.0.0.1:6379> llen list
(integer) 7

LINDEX

bash 复制代码
LINDEX key index

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

bash 复制代码
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

bash 复制代码
LRANGE key start stop

获取列表指定范围的元素

bash 复制代码
127.0.0.1:6379> lrange list 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "0"

删除语法

LPOP

bash 复制代码
LPOP KEY

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

bash 复制代码
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

bash 复制代码
RPOP KEY

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

bash 复制代码
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

bash 复制代码
BLPOP KEY  timeout 

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

bash 复制代码
127.0.0.1:6379> blpop l2 1
(nil)
(1.01s)

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

BRPOP

bash 复制代码
BRPOP KEY timeout

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

LTRIM

bash 复制代码
LTRIM key start stop

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

bash 复制代码
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

bash 复制代码
LREM KEY

删除N个value值。

bash 复制代码
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 -1
 1) "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

bash 复制代码
LSET KEY index value

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

bash 复制代码
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

bash 复制代码
LINSERT KEY BEFORE|AFTER  world value

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

bash 复制代码
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

bash 复制代码
RPOPLPUSH source destination

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

bash 复制代码
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 :循环列表,将最后元素移到左侧
bash 复制代码
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 :从列表中弹出一个值,将弹出的元素插入到另一个列表中并返回他,如果列表没有元素会阻塞列表直到等待超时或者发现可弹出元素为止

应用场景

相关推荐
程序设计实验室1 小时前
在Windows上将git与ssh-agent搭配使用,再也不用输入git密码了
windows·git
m0_595199851 小时前
Redis(以Django为例,含具体操作步骤)
数据库·redis·缓存
秃了也弱了。2 小时前
Redisson3.14.1及之后连接阿里云redis代理模式,使用分布式锁:ERR unknown command ‘WAIT‘
redis·阿里云·代理模式
染翰2 小时前
lua入门以及在Redis中的应用
开发语言·redis·lua
A尘埃6 小时前
Redis在地理空间数据+实时数据分析中的具体应用场景
java·redis
Momentary_SixthSense13 小时前
RESP协议
java·开发语言·javascript·redis·后端·python·mysql
努力的小郑14 小时前
放弃使用 Redis 事务!这才是它正确的打开方式!
数据库·redis
海天胜景14 小时前
编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET... 拒绝访问
c语言·windows
Seven9715 小时前
用过redis哪些数据类型?Redis String 类型的底层实现是什么?
redis
搏博1 天前
基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程
windows·python·自然语言处理·flask·中文分词