Redis-4、List(列表)

Redis中所有有关list的操作命令都是『L』开头

基本操作

##左侧插入 - 头插法 lpush

127.0.0.1:6379> lpush l1 1 # 从左边向l1中插入值1(头插法)
(integer) 1
127.0.0.1:6379> lpush l1 2 # 从左边向l1中插入值2
(integer) 2
127.0.0.1:6379> lpush l1 3 # 从左边向l1中插入值3
(integer) 3

右侧插入 - 尾插法 rpush

127.0.0.1:6379> lrange l1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> rpush l1 name age 从右边向l1中插入值name age(尾插法)
(integer) 5
127.0.0.1:6379> lrange l1 0 -1
1) "3"
2) "2"
3) "1"
4) "name"
5) "age"

##通过区间获取值 lrange

127.0.0.1:6379> lrange l1 0 -1 # 取出l1中所有的值,注意:list取出是从后向前,类似于『栈』
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange l1 0 1 # 取出第0和第1个值,像栈一样,先进后出
1) "3"
2) "2"
127.0.0.1:6379> 

删除list中的值 lpop、rpop

127.0.0.1:6379> lrange l1 0 -1
1) "3"
2) "2"
3) "1"
4) "name"
5) "age"
127.0.0.1:6379> lpop l1 # 从头部(左边)删除一个值,删除成功会返回被删除的值
"3"
127.0.0.1:6379> lrange l1 0 -1
1) "2"
2) "1"
3) "name"
4) "age"
127.0.0.1:6379> rpop l1 # 从尾部(右边)删除一个值,删除成功会返回被删除的值
"age"
127.0.0.1:6379> lrange l1 0 -1
1) "2"
2) "1"
3) "name"

通过索引获取 lindex

127.0.0.1:6379> lrange l1 0 -1
1) "2"
2) "1"
3) "name"
127.0.0.1:6379> lindex l1 3 # 获取不到会返回nil
(nil)
127.0.0.1:6379> lindex l1 2 # 索引从0开始
"name"

获取list的长度 llen

127.0.0.1:6379> lrange l1 0 -1
1) "2"
2) "1"
3) "name"
127.0.0.1:6379> llen l1 # 获取list的长度
(integer) 3

移除指定的值 lrem

127.0.0.1:6379> lrange l1 0 -1 # 2个1 2个2 3个name
1) "1"
2) "2"
3) "name"
4) "name"
5) "2"
6) "1"
7) "name"
127.0.0.1:6379> lrem l1 1 1 # 移除l1中的1,从上到下移除1个
(integer) 1
127.0.0.1:6379> lrange l1 0 -1 # 1个1 2个2 3个name
1) "2"
2) "name"
3) "name"
4) "2"
5) "1"
6) "name"
127.0.0.1:6379> lrem l1 2 name # 移除l1中的name,从上到下移除2个
(integer) 2
127.0.0.1:6379> lrange l1 0 -1 # 1个1 2个2 1个name
1) "2"
2) "2"
3) "1"
4) "name"

截取数据 ltrim

127.0.0.1:6379> rpush mylist liuyi chener zhangsan lisi wangwu
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "liuyi"
2) "chener"
3) "zhangsan"
4) "lisi"
5) "wangwu"
127.0.0.1:6379> ltrim mylist 1 3 # 从第1个位置开始,取3个
OK
127.0.0.1:6379> lrange mylist 0 -1 # ltrim操作会改变数据
1) "chener"
2) "zhangsan"
3) "lisi"

更新指定下标的值 lset

127.0.0.1:6379> lset mylist 3 hahaha # 在list不存在的情况下set会报错
(error) ERR no such key
127.0.0.1:6379> rpush mylist name age sex
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> lset mylist 2 hahaha #索引从0开始,根据索引位置进行更新
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "name"
2) "age"
3) "hahaha"

使用场景

  • 消息队列
# 从右边插入(尾插法)消息
127.0.0.1:6379> rpush messageQueue "email zhangsan "
(integer) 1
127.0.0.1:6379> rpush messageQueue "email lisi"
(integer) 2
127.0.0.1:6379> rpush messageQueue "email wangwu"
(integer) 3
127.0.0.1:6379> rpush messageQueue "email liuyi"
(integer) 4
127.0.0.1:6379> rpush messageQueue "email chener"
(integer) 5

# 查看全部消息
127.0.0.1:6379> lrange messageQueue 0 -1
1) "email zhangsan "
2) "email lisi"
3) "email wangwu"
4) "email liuyi"
5) "email chener"

# 从左边消费
127.0.0.1:6379> lpop messageQueue
"email zhangsan "
127.0.0.1:6379> lpop messageQueue
"email lisi"

# 查看剩余消息
127.0.0.1:6379> lrange messageQueue 0 -1
1) "email wangwu"
2) "email liuyi"
3) "email chener"
  • 可以作为栈来使用,左边插入左边出 或者 右边插入右边出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值