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

应用场景

相关推荐
立秋678930 分钟前
Python的defaultdict详解
服务器·windows·python
Indigo_code1 小时前
【数据结构】【链表代码】合并有序链表
数据结构·windows·链表
暮雪倾风1 小时前
【WPF开发】超级详细的“文件选择”(附带示例工程)
windows·wpf
BergerLee2 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
huapiaoy2 小时前
Redis中数据类型的使用(hash和list)
redis·算法·哈希算法
何中应3 小时前
如何使用CMD命令启动应用程序(二)
windows·桌面应用·batch命令
【D'accumulation】3 小时前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
Cikiss3 小时前
微服务实战——SpringCache 整合 Redis
java·redis·后端·微服务
sukalot4 小时前
windows C++-使用任务和 XML HTTP 请求进行连接(一)
c++·windows
一休哥助手4 小时前
Redis 五种数据类型及底层数据结构详解
数据结构·数据库·redis