欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 【redis】数据类型之list

【redis】数据类型之list

2025/6/21 11:51:05 来源:https://blog.csdn.net/u022812849/article/details/145476004  浏览:    关键词:【redis】数据类型之list

Redis的List数据类型是一个双向链表,支持在链表的头部(left)和尾部(right)进行元素的插入(push)和弹出(pop)操作。这使得List既可以用作栈(stack),也可以用作队列(queue)。

有关list类型的命令可以通过help @list命令来查看。有关命令的使用可以通过help 命令来查看,例如help lpush

简单使用

LPUSH

lpush:在列表的左边插入元素。

语法:

LPUSH key element [element ...]

使用:

127.0.0.1:6379> lpush k1 a b c d
(integer) 4

LRANGE

lrange:查看列表中的元素。

语法:

LRANGE key start stop

使用:

127.0.0.1:6379> lrange k1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"

LPOP

lpop:从列表的左边取出一个元素。

语法:

LPOP key [count]

使用

127.0.0.1:6379> lpop k1
"d"127.0.0.1:6379> lpop k1 3
1) "c"
2) "b"
3) "a"

RPUSH

rpush:在列表的右边插入元素。

语法:

RPUSH key element [element ...]

使用:

127.0.0.1:6379> rpush k1 a b c d
(integer) 4

RPOP

rpop:从列表的右边取出一个元素。

语法:

RPOP key [count]

使用:

127.0.0.1:6379> rpop k1
"d"127.0.0.1:6379> rpop k1 3
1) "c"
2) "b"
3) "a"

LINDEX

lindex:查询指定索引的元素。

语法:

LINDEX key index

使用:

127.0.0.1:6379> lpush k1 a b c d
(integer) 4127.0.0.1:6379> lindex k1 -1
"a"

LLEN

llen:获取列表的长度。

语法:

LLEN key

使用:

127.0.0.1:6379> llen k1
(integer) 4

LINSERT

linsert:在指定元素的前面或后面插入元素。

语法:

LINSERT key BEFORE|AFTER pivot element

使用:

127.0.0.1:6379> linsert k1 before b x
(integer) 5127.0.0.1:6379> lrange k1 0 -1
1) "d"
2) "c"
3) "x"
4) "b"
5) "a"

LREM

lrem:根据指定个数的指定元素。

语法:

LREM key count element

使用:

127.0.0.1:6379> lrange k1 0 -1
1) "a"
2) "c"
3) "b"
4) "a"
5) "d"
6) "c"
7) "x"
8) "b"
9) "a"127.0.0.1:6379> lrem k1 2 a
(integer) 2127.0.0.1:6379> lrange k1 0 -1
1) "c"
2) "b"
3) "d"
4) "c"
5) "x"
6) "b"
7) "a"

使用的lrem的注意事项:

  • 指定的count超出列表中对应元素的个数,删除所有指定的元素。

  • count为负数,从右往左删除。

  • count为0,删除所有指定的元素。

  • count为正数,从左往右删除。

LSET

lset:设置指定索引位置的元素。

语法:

LSET key index element

使用:

127.0.0.1:6379> lset k1 3 y
OK127.0.0.1:6379> lrange k1 0 -1
1) "c"
2) "b"
3) "d"
4) "y"
5) "x"
6) "b"
7) "a"

LTRIM

ltrim:截取保留列表中指定索引的元素。

语法:

LTRIM key start stop

使用:

127.0.0.1:6379> ltrim k1 3 6
OK127.0.0.1:6379> lrange k1 0 -1
1) "y"
2) "x"
3) "b"
4) "a"

LPOS

lpos:在列表中匹配第一个找到的元素,可以指定范围,默认从头到尾扫描。

语法:

LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]

使用:

127.0.0.1:6379> rpush k2 a b c 1 2 3 c c
(integer) 8127.0.0.1:6379> lpos k2 c
(integer) 2127.0.0.1:6379> lpos k2 c rank 2
(integer) 6127.0.0.1:6379> lpos k2 c rank -1
(integer) 7127.0.0.1:6379> lpos k2 c count 2
1) (integer) 2
2) (integer) 6

LMOVE

lmove:用于从一个列表弹出一个元素,并将其推入到另一个列表中。这个命令通常用于在两个列表之间转移元素,或者在处理消息队列时,从一个队列中取出任务并将其放入另一个队列中。

语法:

LMOVE source destination LEFT|RIGHT LEFT|RIGHT

使用:

127.0.0.1:6379> lmove k1 k3 LEFT RIGHT
"y"

LPUSHX

lpushx:用于将一个或多个值插入到已存在的列表的头部(左端)。与LPUSH命令不同的是,如果指定的列表不存在,LPUSHX命令不会创建新列表,而是直接返回操作失败。

语法:

LPUSHX key element [element ...]

使用:

127.0.0.1:6379> lpushx k1 xx
(integer) 5127.0.0.1:6379> lpushx kk xx
(integer) 0

RPOPLPUSH

rpoplpush:从源列表的右端(尾部)弹出一个元素,并将该元素插入到目标列表的左端(头部)。这个命令通常用于在两个列表之间安全地传递元素,特别是在实现队列或任务调度时非常有用。

语法:

RPOPLPUSH source destination

使用:

127.0.0.1:6379> rpoplpush k1 k3
"a"

RPUSHX

rpushx:用于将一个或多个值插入到已存在的列表的尾部(右端)。与RPUSH命令不同的是,如果指定的列表不存在,RPUSHX命令不会创建新列表,而是直接返回操作失败。

语法:

RPUSHX key element [element ...]

使用:

127.0.0.1:6379> rpushx k3 a b
(integer) 4127.0.0.1:6379> rpushx kv a b
(integer) 0

阻塞命令的使用

BLMOVE

blmove:用于将一个元素从一个列表移动到另一个列表,并在源列表为空时阻塞操作,直到有元素可用或达到超时时间。

语法:

BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout

使用:

127.0.0.1:6379> blmove k1 k3 LEFT RIGHT 2000
"xx"127.0.0.1:6379> blmove emptylist k3 LEFT RIGHT 2
(nil)
(2.03s)

BLPOP

blpop:从列表的左端(头部)弹出一个元素,并阻塞等待直到列表中出现元素可弹出或达到超时时间。

语法:

BLPOP key [key ...] timeout

使用:

127.0.0.1:6379> blpop k1 2
1) "k1"
2) "xx"127.0.0.1:6379> blpop emptylist 2
(nil)
(2.02s)

BRPOP

brpop:从列表的右端(尾部)弹出一个元素,并阻塞等待直到列表中出现元素可弹出或达到超时时间。

语法:

BRPOP key [key ...] timeout

使用:

127.0.0.1:6379> brpop k1 2
1) "k1"
2) "b"127.0.0.1:6379> brpop emptylist 2
(nil)
(2.02s)

BRPOPLPUSH

brpoplpush:BRPOPLPUSH命令的行为与RPOPLPUSH命令完全相同,即从source列表的尾部弹出一个元素,并将该元素推入到destination列表中。

当source列表为空时,Redis将阻塞连接,直到另一个客户端向source列表推送元素,或者直到指定的timeout时间达到。

语法:

BRPOPLPUSH source destination timeout

使用:

127.0.0.1:6379> brpoplpush k3 k4 2
"xx"

内部编码

列表类型的内部编码为quicklist

127.0.0.1:6379> rpush k3 a b c
(integer) 3127.0.0.1:6379> object encoding k3
"quicklist"

使用场景

  1. 链表:lpush+rpop,rpush+lpop,反向命令的组合可以实现链表。

  2. 栈:lpush+lpop,rpush+rpop,同向命令的组合可以实现栈。

  3. 数组:rpush+lindex+lset,可以实现数组的功能。

  4. 消息队列:lpush+brpop。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词