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>