6. Redis数据类型--List

Redis 列表(List)


Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
实例

redis 127.0.0.1:6379> LPUSH runoobkey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH runoobkey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE runoobkey 0 10

1) "mysql"
2) "mongodb"
3) "redis"

在以上实例中我们使用了 LPUSH 将三个值插入了名为 runoobkey 的列表当中。
Redis 列表命令
下表列出了列表相关的基本命令:

BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

BRPOPLPUSH source  destination timeout
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

LINDEX key index
通过索引获取列表中的元素

LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素

LLEN key
获取列表长度

LPOP key
移出并获取列表的第一个元素

LPUSH key value1 [value2]
将一个或多个值插入到列表头部

LPUSHX key value
将一个值插入到已存在的列表头部

LRANGE key start stop
获取列表指定范围内的元素

LREM key count value
移除列表元素

LSET key index value
通过索引设置列表元素的值

LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。14RPOP key
移除列表的最后一个元素,返回值为移除的元素。

RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素添加到另一个列表并返回

RPUSH key value1 [value2]
在列表中添加一个或多个值

RPUSHX key value
为已存在的列表添加值

注意:

  • list实际上是一个链表,left和right都可以插入值;
  • 如果key不存在,创建新的列表;
  • 如果key存在,新增内容元素;
  • 如果移除了所有的值,链表元素为空,代表列表不存在;
  • 在两边插入值得效率是最高!中间元素效率会低一些。

Redis List类型操做命令实例:

LPUSH:向左边依次添加元素
RPUSH:向右边依次添加元素

127.0.0.1:6379> RPUSH list redis mongodb mysql
(integer) 3
127.0.0.1:6379> keys *
1) "list"
127.0.0.1:6379> LRANGE list 0 -1		# 向右push,所以redis在前
1) "redis"
2) "mongodb"
3) "mysql"
127.0.0.1:6379> LPUSH list java python c++		# # 向左push,所以c++在前
(integer) 6
127.0.0.1:6379> LRANGE list 0 -1
1) "c++"
2) "python"
3) "java"
4) "redis"
5) "mongodb"
6) "mysql"

LPOP:左边第一个元素被弹出
RPOP:右边第一个元素被弹出

127.0.0.1:6379> LRANGE list 0 -1
1) "c++"
2) "python"
3) "java"
4) "redis"
5) "mongodb"
6) "mysql"
127.0.0.1:6379> LPOP list		# 左边第一个是c++
"c++"
127.0.0.1:6379> RPOP list		# 右边第一个是mysql
"mysql"
127.0.0.1:6379> LRANGE list 0 -1
1) "python"
2) "java"
3) "redis"
4) "mongodb"
127.0.0.1:6379>

LRANGE:从左边开始数,拿出列表元素
LINDEX: 从左边开始数,拿出下标元素

注意:没有RRANGE和RINDEX

127.0.0.1:6379> LRANGE list 0 -1
1) "c++"
2) "python"
3) "java"
4) "redis"
5) "mongodb"
6) "mysql"

127.0.0.1:6379> RRANGE list 0 -1		# 没有RRANGE
(error) ERR unknown command `RRANGE`, with args beginning with: `list`, `0`, `-1`,

127.0.0.1:6379> LINDEX list 0
"c++"
127.0.0.1:6379> LINDEX list 1
"python"
127.0.0.1:6379> LINDEX list 2
"java"
127.0.0.1:6379> RINDEX list 0		# 没有RINDEX
(error) ERR unknown command `RINDEX`, with args beginning with: `list`, `0`,

LLEN:查看列表长度:

127.0.0.1:6379> RPUSH list python
(integer) 7
127.0.0.1:6379> LRANGE list 0 -1
1) "c++"
2) "python"
3) "java"
4) "redis"
5) "mongodb"
6) "mysql"
7) "python"
127.0.0.1:6379> LLEN list
(integer) 7

LREM:移除列表得指定元素,count代表
在这里插入图片描述

127.0.0.1:6379> LRANGE list 0 -1
1) "c++"
2) "python"
3) "java"
4) "redis"
5) "mongodb"
6) "mysql"
7) "python"
127.0.0.1:6379> LLEN list
(integer) 7
127.0.0.1:6379> LREM list 1 python
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "c++"
2) "java"
3) "redis"
4) "mongodb"
5) "mysql"
6) "python"
127.0.0.1:6379> LREM list 1 python
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "c++"
2) "java"
3) "redis"
4) "mongodb"
5) "mysql"
127.0.0.1:6379>
127.0.0.1:6379> LPUSH list python
(integer) 6
127.0.0.1:6379> LPUSH list python
(integer) 7
127.0.0.1:6379> LRANGE list 0 -1
1) "python"
2) "python"
3) "c++"
4) "java"
5) "redis"
6) "mongodb"
7) "mysql"
127.0.0.1:6379> LREM list 2 python
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "c++"
2) "java"
3) "redis"
4) "mongodb"
5) "mysql"

LTRIM:截取列表部分,截取之后列表就变为被截取得部分

127.0.0.1:6379> LPUSH list1 0 1 2 3 4 5
(integer) 6
127.0.0.1:6379> LTRIM list1 1 4
OK
127.0.0.1:6379> LRANGE list1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"

RPOPLPUSH:从来源列表拿出最后一个元素,放到目标列表得第一个位置

127.0.0.1:6379> RPUSH list 1 2 3 4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> RPOPLPUSH list dest_list
"4"
127.0.0.1:6379>

127.0.0.1:6379> LRANGE dest_list 0 -1
1) "4"
127.0.0.1:6379>
127.0.0.1:6379> RPOPLPUSH list dest_list
"3"
127.0.0.1:6379> LRANGE list 0 -1
1) "1"
2) "2"
127.0.0.1:6379> LRANGE dest_list 0 -1
1) "3"
2) "4"

LSET设置列表指定位置的值,不存在列表则报错,下标错误也报错
1

27.0.0.1:6379> EXISTS lang
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> LSET lang 0 java
(error) ERR no such key
127.0.0.1:6379>
127.0.0.1:6379> LPUSH lang java
(integer) 1
127.0.0.1:6379> LSET lang 0 python
OK
127.0.0.1:6379> LRANGE lang 0 -1
1) "python"
127.0.0.1:6379> LSET lang 1 python
(error) ERR index out of range

LINSERT:在指定元素前边或者后边插入元素,只会在找到的第一个元素前后插入

127.0.0.1:6379> LRANGE lang 0 -1
1) "python"
127.0.0.1:6379> LINSERT lang after 1 python
(integer) -1
127.0.0.1:6379> LRANGE lang 0 -1
1) "python"
127.0.0.1:6379> LINSERT lang after python java
(integer) 2
127.0.0.1:6379> LRANGE lang 0 -1
1) "python"
2) "java"
127.0.0.1:6379> LINSERT lang before python c++
(integer) 3
127.0.0.1:6379> LRANGE lang 0 -1
1) "c++"
2) "python"
3) "java"
127.0.0.1:6379> RPUSH lang python
(integer) 4
127.0.0.1:6379> LRANGE lang 0 -1
1) "c++"
2) "python"
3) "java"
4) "python"
127.0.0.1:6379> LINSERT lang before python sql
(integer) 5
127.0.0.1:6379> LRANGE lang 0 -1
1) "c++"
2) "sql"
3) "python"
4) "java"
5) "python"

移除所有值,列表也就不存在了

127.0.0.1:6379> LRANGE lang 0 -1
1) "c++"
2) "sql"
3) "sql"
4) "python"
5) "java"
6) "python"
127.0.0.1:6379> LTRIM lang 1 0
OK
127.0.0.1:6379> LRANGE lang 0 -1
(empty list or set)
127.0.0.1:6379>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值