redis --- 常用数据类型List

List

基本的数据类型,列表
在这里插入图片描述
在redis里面,我们可以把list玩成,栈、队列、阻塞队列!
所有的list命令都是以l开头的

设置值获取值
###########################################################################
127.0.0.1:6379> lpush list one # 将一个值或者多个值,插入到列表的头部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1 # 获取list中的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1 # 通过区间获取具体的值
1) "three"
2) "two"
127.0.0.1:6379> rpush list right #将一个值或者多个值,插入到尾部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
移除值
###########################################################################
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list # 移除list的第一个元素
"three"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpop list # 移除list的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
根据下标获取值
###########################################################################
127.0.0.1:6379> lrange list 0 -1
"two"
"one"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379> lindex list 0
"two"
list 长度
###########################################################################
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> llen list
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> llen list
(integer) 3
移除集合中指定个数的value
###########################################################################
127.0.0.1:6379> lrange list 0 -1 
1) "three" # 元素值是可以重复的
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> rpush list one
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
5) "one"
127.0.0.1:6379> lrem list 1 three # 移除1个three元素
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "one"
127.0.0.1:6379> lrem list 2 one #移除2个one元素
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"

通过下标截取

###########################################################################
127.0.0.1:6379> lrange mylist 0 -1
1) "four"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> ltrim mylist 1 2 # 从下标为1开始截取长度为2的数据
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "four"
2) "three"

rpoplpush

移除列表的最后一个元素,将它移动到新的列表中

127.0.0.1:6379> rpush mylist one
(integer) 1
127.0.0.1:6379> rpush mylist two
(integer) 2
127.0.0.1:6379> rpush mylist three
(integer) 3
127.0.0.1:6379> rpoplpush mylist otherlist # 移除mylist最后一个元素,添加到otherlist
"three"
127.0.0.1:6379> lrange mylist 0 -1
1) "one"
2) "two"
127.0.0.1:6379> lrange otherlist 0 -1
1) "three"

lset

127.0.0.1:6379> exists list  # 判断列表是否存在
(integer) 0
127.0.0.1:6379> lset list 0 item # 如果不存在列表使用命令会报错
(error) ERR no such key
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lrange list 0 0
1) "one"
127.0.0.1:6379> lset list 0 item #如果存在则会更新相应下标值
OK
127.0.0.1:6379> lrange list 0 0
1) "item"
127.0.0.1:6379> lset list 1 item  # 如果下标之不存在会报错
(error) ERR index out of range
linsert 将某个具体的value 插入到列表中某个元素的前面或者后面
127.0.0.1:6379> lrange mylist 0 -1
1) "item"
127.0.0.1:6379> lpush mylist hello
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "item"
127.0.0.1:6379> linsert mylist before "item" "world" # 在item元素前插入元素 world
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
3) "item"
127.0.0.1:6379> linsert mylist after "item" "newInsert" #在item元素后插入元素 newInsert
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
3) "item"
4) "newInsert"
小结

 - 实际上是一个链表,before Node after,left right 都可以插入值
 - 如果key不存在,创建新的链表
 - 如果key存在,新增内容
 - 如果移除了所有值,空链表,也代表不存在
 - 在两边插入或者改动值,效率最高,中间元素,相对说效率低一点

消息队列:lpush rpop (左进有出:先进先出)
栈:lpush lpop (左进左出:先进后出)

参考并感谢 BIlibili up主:狂神说Java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值