redis类型之list列表

本文详细介绍了如何在Redis中使用list数据结构,包括LPOP/RPOP移除元素、LINSERT插入元素的位置、LSET修改元素值以及ltrim截断列表。通过实例展示了不同命令的使用和其对列表的影响。
摘要由CSDN通过智能技术生成

列表相当于队列
所有的list命令都是以L开头

插入、获取

127.0.0.1:6379> flushall  清空所有
OK
# 依次插入:a  b  c
127.0.0.1:6379> lpush name a  往列表里面插入值
(integer) 1
127.0.0.1:6379> lpush name b     插入b
(integer) 2
127.0.0.1:6379> lpush name c  插入c
(integer) 3
127.0.0.1:6379> lrange name 0 -1    获取列表全部值 
1) "c"
2) "b"
3) "a"
127.0.0.1:6379>  lrange name 0 1  只获取两位值
1) "c"
2) "b"
当指定获取的值为0到1时得到的却是c和b,
如上所示获取列表里面的值可以发现是从左往右插入值(也就是一直往列表头部插入值)
即插入的真实位置是:c b a 最左边的值为0位   
127.0.0.1:6379> lrange name 0 2
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush name d  再次插入一个值(这次往右插入)
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "c"
2) "b"
3) "a"
4) "d"
注意此时插入的值在最下面正序排列(也就是往a右边插入值)向尾部插入值

删除值

127.0.0.1:6379> LLEN  name  获取整个列表长度
(integer) 4
127.0.0.1:6379> LREM name 0 "a"  移除指定值,0:
(integer) 1
127.0.0.1:6379> lrange name 0 -1  查看a值被删除
1) "c"
2) "b"
3) "d"
127.0.0.1:6379> lpop name   移除头部值(也就是最左边的)
"c"
127.0.0.1:6379> lrange name 0 -1   查看
1) "b"
2) "d"
127.0.0.1:6379> rpop name  移除尾部值(也就是最右边的值)
"d"
127.0.0.1:6379> lrange name 0 -1  查看
1) "b"

可以通过 LREM 命令移除列表中的指定元素:

LREM list count element

count 参数的值决定了 LREM 命令移除元素的方式
(以下演示count的值都为2)
LREM 命令在执行完毕之后将返回被移除的元素数量作为返回值。

127.0.0.1:6379> RPUSH sample1 "a" "b" "b" "a" "c" "c" "a"
(integer) 7
#如果 count 参数的值等于 0 
#那么 LREM 命令将移除列表中包含的所有指定元素;
#执行以下命令将移除 sample1 列表包含的所有 "a" 元素:
127.0.0.1:6379> LREM sample1 0 a
(integer) 3
127.0.0.1:6379> lrange sample1 0 -1 
1) "b"
2) "b"
3) "c"
4) "c"
#如果 count 参数的值大于 0 ,
#那么 LREM 命令将从列表的左端开始向右进行检查,
#并移除最先发现的 count 个指定元素;
#而执行以下命令将移除 sample2 列表最靠近列表左端的两个 "a" 元素:
127.0.0.1:6379> RPUSH sample2 "a" "b" "b" "a" "c" "c" "a"
(integer) 7
127.0.0.1:6379> LREM sample2 2 a
(integer) 1
(integer) 2
127.0.0.1:6379> lrange sample2 0 -1
1) "b"
2) "b"
3) "c"
4) "c"
5) "a"

#上面的 LREM 命令只要求移除最先发现的两个 "a" 元素
#所以位于列表最右端的 "a" 元素并没有被移除,

在这里插入图片描述

如果 count 参数的值小于 0 ,
那么 LREM 命令将从列表的右端开始向左进行检查,
并移除最先发现的 abs(count) 个指定元素(abs(count) 即是 count 的绝对值);

127.0.0.1:6379> RPUSH sample3 "a" "b" "b" "a" "c" "c" "a"
(integer) 7
127.0.0.1:6379> LREM sample3 -2 a    
(integer) 2
127.0.0.1:6379> lrange sample3 0 -1
1) "a"
2) "b"
3) "b"
4) "c"
5) "c"

在这里插入图片描述通过下标获取值及截断

lindex通过下标获取值
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> lpush list a b c d 
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lindex list 2
"b"

ltrim截断命令
127.0.0.1:6379> lpush list a b c d 
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "d"   3
2) "c"   2
3) "b"   1
4) "a"   0
127.0.0.1:6379> ltrim list 1 2  截断:表示只保留1和2两个位的值
OK
127.0.0.1:6379> lrange list 0 -1  再次获取
1) "c"
2) "b"    对比上面的保留了1.2

rpoplpush移除命令

127.0.0.1:6379> flushall  清空所有
OK
127.0.0.1:6379> flushdb  清空所有
OK
127.0.0.1:6379> rpush name aa bb cc   插入多个值
(integer) 3
127.0.0.1:6379> lrange name 0 -1    获取多个值
1) "aa"
2) "bb"
3) "cc"  最后一个元素

移除列表最后一个元素到新的列表中name1(此列表不存在)
127.0.0.1:6379> rpoplpush name name1  
"cc"
127.0.0.1:6379> lrange name 0 -1     获取之后少了CC
1) "aa"
2) "bb"
127.0.0.1:6379> lrange name1 0 -1  查看新的列表存在CC
1) "cc"

lset通过下标更改列表元素

127.0.0.1:6379> flushdb  清空
OK
127.0.0.1:6379> lset naem 0 11  更改一个不存在的列表元素
(error) ERR no such key  报错(lset命令:此列表必须存在)
127.0.0.1:6379> lpush name a1    插入一个值
(integer) 1
127.0.0.1:6379> lrange name 0 -1  获取
1) "a1"
127.0.0.1:6379> lset name 0 b1  使用lset通过下标更改列表的元素
OK
127.0.0.1:6379> lrange name 0 -1    可以看到a1已经变成b1
1) "b1"
因为只有一个元素且下标为0所以更改3是错的
127.0.0.1:6379> lset name 3 f1   
(error) ERR index out of range

linsert往指定位置插入值

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> lpush name hello word
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "word"
2) "hello"
before前面插入
127.0.0.1:6379> linsert name  before word aa  往word前面插入aa
(integer) 3

127.0.0.1:6379> lrange name 0 -1
1) "aa"
2) "word"
3) "hello"
往hello之后插入bb
127.0.0.1:6379> linsert name  after hello bb  
(integer) 4
127.0.0.1:6379> lrange name 0 -1 
1) "aa"
2) "word"
3) "hello"
4) "bb"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值