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

应用场景

相关推荐
我真的是大笨蛋12 小时前
Redis的String详解
java·数据库·spring boot·redis·spring·缓存
zhengzizhe14 小时前
Redssion出现attempt to unlock lock, not locked by current thread by node id
redis
兜兜风d'18 小时前
redis字符串命令
数据库·redis·缓存
非凡ghost18 小时前
猫眼浏览器(Chrome内核增强版浏览器)官方便携版
前端·网络·chrome·windows·软件需求
西瓜er19 小时前
Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析
redis·docker·gitlab
道可到20 小时前
别再瞎拼技术栈!Postgres 已经能干 Redis 的活了
redis·后端·postgresql
野犬寒鸦20 小时前
从零起步学习Redis || 第十二章:Redis Cluster集群如何解决Redis单机模式的性能瓶颈及高可用分布式部署方案详解
java·数据库·redis·后端·缓存
熊文豪1 天前
Windows安装RabbitMQ保姆级教程
windows·分布式·rabbitmq·安装rabbitmq
搬砖的小码农_Sky1 天前
Windows操作系统上`ping`命令的用法详解
运维·网络·windows
草莓熊Lotso1 天前
《C++ STL list 完全指南:从基础操作到特性对比,解锁链表容器高效用法》
开发语言·c++·list