0.2、Redis学习-列表类型及主要命令行

本文深入讲解Redis列表类型的常用命令,包括基本操作如RPUSH、LPUSH、LRANGE等,以及阻塞式命令如BLPOP、BRPOP。通过实例演示如何在列表两端进行元素的添加、删除和获取,适用于Redis初学者和技术人员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

体能状态先于精神状态,习惯先于决心,聚焦先于喜好。

Redis 官方完整的命令行文档

https://redis.io/commands

本文实验 Redis 版本为3.2.100

在Redis 2.6版本及之前,有些命令是不被支持的,建议读者安装2.6之后的版本。
命令行中 key 表示 key的name,在实际使用中对应 key的名字。
[] 表示被其包括的命令可有可无。
命令行中 value 存储的值 。
对于增、减操作,key不存在于 Redis 时,默认创建一个value为 0 的 key。
append 命令,key不存在于 Redis 时,默认创建一个空串。
Redis 计数默认从左开始,以0为基数。
Redis 命令行中空为 (nil)
弹出:即从列表中返回该元素,并从列表中删除该元素

Redis 列表类型简介

Redis 列表是对链表结构的支持
Redis 列表用以存储有序的字符串,字符串可以重复
Redis 支持对列表的两端进行操作,新增或者删除元素
Redis支持对列表中某一个序数的元素进行操作——序数需合法
Redis支持对列表中指定序数区间的元素的集中获取
Redis列表无法存储null值,“null”字符串是可以的
Redis支持用阻塞的方式经过有限时长等待获取列表即将新增的元素-Redis 列表可以用于实现消息传送和任务队列(task queue)
列表的左右-将列表自上向下罗列,上就是所谓的左,下就是所谓的右,也可以叫队首为左,队尾为右
列表可以认为是一般数据结构中的list

常用命令行
基本操作
RPUSH key value [···] 以右为首 将一(多)个元素推入队首

以右为队首,新元素放到队尾

127.0.0.1:6379> rpush rlist 001 002 003
(integer) 3
127.0.0.1:6379> lrange rlist 0 100
1) "001"
2) "002"
3) "003"

LPUSH key value [···] 以左为首 将一(多)个元素推入队首

以左为队首,新元素放到队首
127.0.0.1:6379> lpush llist 001 002 003
(integer) 3
127.0.0.1:6379> lrange llist 0 100

  1. “003”
  2. “002”
  3. “001”
LRANGE key start end 返回列表中偏移量自start至end的元素

以左为队首,队首为0开始
包含 start和end对应的元素
查看 上面两个命令行的案例

RPOP key 以右为首 移除并返回列表队首元素
127.0.0.1:6379> lrange llist 0 100
1) "003"
2) "002"
3) "001"

127.0.0.1:6379> rpop llist
"001"

127.0.0.1:6379> lrange llist 0 100
1) "003"
2) "002"
LPOP key 以左为首 移除并返回列表队首元素
127.0.0.1:6379> lrange rlist 0 100
1) "100"
2) "200"
3) "300"

127.0.0.1:6379> lpop rlist
"100"

127.0.0.1:6379> lrange rlist 0 100
1) "200"
2) "300"
LINDEX key offset 以左为首 返回列表中偏移量为offset的元素

从左端计数,以0为第一个数

127.0.0.1:6379> lrange rlist 0 100
1) "200"
2) "300"

127.0.0.1:6379> lindex rlist 0
"200"
LTRIM key start end 以左为首,修剪列表保留start到end区间的元素

从左端计数,以0开始
包含 start和end对应的元素

127.0.0.1:6379> lrange rlist 0 100
1) "200"
2) "300"


127.0.0.1:6379> ltrim rlist 1 1
OK

127.0.0.1:6379> lrange rlist 0 100
1) "300"
LSET key index value 以左为首,将元素指定偏移量的值进行替换

从左开始计数,以0开始

127.0.0.1:6379> lrange rlist 0 100
1) "300"

127.0.0.1:6379> lset rlist 0 400
OK

127.0.0.1:6379> lrange rlist 0 100
1) "400"
RPOPLPUSH source-key dest-key 从源列表右侧队首弹出元素推入目标列表左端队首

source-key 源列表
dest-key 目标列表
用于在两个列表之间移动元素
一次只能剪切一个元素

127.0.0.1:6379> lpush llista 100 200 300
(integer) 3
127.0.0.1:6379> lrange llista 0 100
1) "300"
2) "200"
3) "100"
127.0.0.1:6379> rpoplpush llista llistb
"100"
127.0.0.1:6379> rpoplpush llista llistb
"200"
127.0.0.1:6379> lrange llistb 0 100
1) "200"
2) "100"
127.0.0.1:6379> lrange llista 0 100
1) "300"
127.0.0.1:6379> 
阻塞式命令

block 阻塞,阻塞式命令以b开头

BLPOP key[···] timeout 如果有元素则从左侧弹出,无可弹元素阻塞等待n秒

如果列表左侧有元素,则立即弹出元素,该元素将从列表去除
如果没有元素,则等待n秒,n秒内有新元素加入则弹出
如果超时没有元素弹出,则返回 (nil)
允许使用多个列表,多个列表按照先后顺序,只要有一个元素存在就弹出并停止

127.0.0.1:6379> lpush list 100 200 300
(integer) 3
127.0.0.1:6379> blpop list 3
1) "list"
2) "300"
127.0.0.1:6379> blpop list 10
1) "list"
2) "200"
127.0.0.1:6379> blpop list 10
1) "list"
2) "100"
127.0.0.1:6379> blpop list 3
(nil)
(3.09s)
BRPOP key[···] timeout 如果有元素则从右侧弹出,无可弹元素阻塞等待n秒

如果列表右侧有元素,则立即弹出元素,该元素将从列表去除
如果没有元素,则等待n秒,n秒内有新元素加入则弹出
如果超时没有元素弹出,则返回 (nil)
允许使用多个列表,多个列表按照先后顺序,只要有一个元素存在就弹出并停止

127.0.0.1:6379> lpush list 100 200 300
(integer) 3
127.0.0.1:6379> brpop list 3
1) "list"
2) "100"
127.0.0.1:6379> brpop list 3
1) "list"
2) "200"
127.0.0.1:6379> brpop list 3
1) "list"
2) "300"
127.0.0.1:6379> brpop list 3
(nil)
(3.04s)
BRPOPLPUSH source-key dest-key timeout 从源列表右侧弹出推入目标列表左端,如果无可弹元素则阻塞n秒等待

source-key 源列表
dest-key 目标列表
用于在两个列表之间移动元素
参考 RPOPLPUSH source-key dest-key 比对,该命令增加了阻塞逻辑

127.0.0.1:6379> brpoplpush lista listb 3
"300"
127.0.0.1:6379> brpoplpush lista listb 3
(nil)
(3.02s)
线程安全

多线程模式下,RPUSH 并不是线程安全的。
http://redisdoc.com/list/rpoplpush.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值