【Redis】五大数据类型之List

Redis 概述

【Redis】概述以及启动Redis并进入Redis

五大数据类型

1.String(字符串)

【Redis】五大数据类型之String

2.List(列表)

基本的数据类型,列表
在这里插入图片描述
在redis里面,可以把list玩成 :栈、队列、阻塞队列!
所有的list命令都是用l开头的,Redis不区分大小命令。

基本命令:

1.插入 lpush、rpush

lpush:将一个值或者多个值,插入到列表头部(左)
在这里插入图片描述
lrange:通过区间获取具体的值
在这里插入图片描述
rpush:将一个值或者多个值,插入到列表尾部 (右)
在这里插入图片描述

127.0.0.1:6379> flushdb #清空当前数据库
OK
127.0.0.1:6379> keys *  # 查看所有的key
(empty array)
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> lrange list 0 -1
1) "three"
2) "two"
3) "one"
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"

在这里插入图片描述
在这里插入图片描述

2.移除 lpop、rpop(看成一个队列)
  • LPOP(lpop): 移除list的第一个元素
  • RPOP(rpop):移除list的最后一个元素
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> rpop list # 移除list的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3.通过下标获得值 lindex

在这里插入图片描述

127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 0 # 通过下标获得 list 中的某一个值
"two"
127.0.0.1:6379> lindex list 1 
"one"
4.获取长度 Llen
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> llen list  # 返回列表的长度
(integer) 3

5.移除指定的值 lrem

类似于取关 uid
在这里插入图片描述
lrem list 个数 元素

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 three # 移除list集合中指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 2 three # 移除掉两个three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
6. ltrim 修剪👉将list 截断

ltrim:通过下标截取指定的长度
在这里插入图片描述

127.0.0.1:6379> flushdb #清空数据库
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> rpush mylist "hello3"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> ltrim mylist 1 2 # 通过下标截取指定的长度,这个list已经被改变了,截断了,只剩下截取的元素!
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
7.rpoplpush :移除列表的最后一个元素,将他移动到新的列表中!

在这里插入图片描述
source代表原来的位置,destination代表新的位置

127.0.0.1:6379> flushdb #清空数据库
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
127.0.0.1:6379> rpoplpush mylist myotherlist # 移除列表的最后一个元素,将他移动到新的列表中
"hello2"
127.0.0.1:6379> lrange mylist 0 -1 # 查看原来的列表
1) "hello"
2) "hello1"
127.0.0.1:6379> lrange myotherlist 0 -1 # 查看目标列表中,确实存在改值
1) "hello2"

8.lset 将列表中指定下标的值替换为另外一个值,更新操作

在这里插入图片描述

127.0.0.1:6379> flushdb #清空数据库
OK
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 value1 #value1不加引号也没事,自动识别
(integer) 1
127.0.0.1:6379> lrange list 0 0
1) "value1"
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 other # 如果不存在列表我们去更新就会报错
(error) ERR index out of range
9. linsert :将某个具体的value插入到列表中某个元素的前面或者后面

在这里插入图片描述

127.0.0.1:6379> flushdb #清空数据库
OK
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "world"
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> linsert mylist before "world" "other" #将other添加到world前面
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "world"
127.0.0.1:6379> linsert mylist after "world" "wanzi" #将wanzi添加到world后面
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "world"
4) "wanzi"
小结
  • 实际上是一个链表,before Node after left Node right 都可以插入值
  • 如果key 不存在,创建新的链表
  • 如果key存在,新增内容
  • 如果移除了所有值,空链表,也代表不存在
  • 在两边插入或者改动值,效率最高; 中间元素,相对来说效率会低一点~

消息排队:消息队列 (Lpush Rpop), 栈( Lpush Lpop)!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值