Redis 基础命令 --- List篇

实验环境

操作系统: ubuntu-16.04-x64
redis版本: 4.0.9

概述

List类型可以存储一个字符串列表,常用的操作是在两端添加弹出元素或者获得列表的一个片段。
List类型内部是使用双向链表实现的,所以向List两端添加元素的时间复杂度是O(1),通过索引获取元素的时间复杂度是O(n)。
List类型还可以作为队列来使用。与Hash类型键值最多能容纳的字段数量相同,一个List类型键最多容纳2^32 - 1个元素。

命令

1.向List两段增加元素

LPUSH key value [value ...] #向List左边增加元素
RPUSH key value [value ...] #向List右边增加元素

例:

127.0.0.1:6379> LPUSH list1 1
(integer) 1
127.0.0.1:6379> RPUSH list1  2 3 4 
(integer) 4

2.从List两段弹出元素

 LPOP key    #从List左边弹出元素
 RPOP key    #从List右边弹出元素

例:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 
(integer) 5
127.0.0.1:6379> LPOP list1
"5"
127.0.0.1:6379> RPOP list1
"1"

3.获取List元素的个数

LLEN key

例:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> LLEN list1
(integer) 6

4.获得List片段

LRANGE key start stop

例:
List 正向(从左到右)索引从0开始,最大为List长度减1。

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

List反向(从右到左)索引从-1开始表示倒数第一个元素,-2表示倒数第二个元素,以此类推。

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

LRANGE key 0 -1可以获取List中所有的所有元素。另外还有一些特殊情况:
(1)如果start的索引位置比stop的索引位置靠后,则会返回空List。

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> LRANGE list1 3 0
(empty list or set)

(2)如果stop大于实际的索引范围,则会返回到列表最右边的元素。

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

5.删除List中指定的值

LREM key count value

LREM命令会删除List中前count个值为value的元素,返回值是实际删除的个数。根据count值得不同,LREM命令的执行方式略有差异。

1.当count > 0时LREM命令会从List左边开始删除前count个值为value的元素
2.当count < 0时LREM命令会从List右边开始删除前| count |个值为value的元素。
3.当count = 0是LREM命令会删除所有值为value的元素。
例:

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


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

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

6.获得/设置指定索引的元素值

LINDEX key index
LSET key index value

LINDEX元素返回指定索引的元素。正索引(从左到右)从0开始,负索引从(从右到左)从-1开始。

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> LINDEX list1 1
"6"
127.0.0.1:6379> LINDEX list1 -1
"1"

LSET将索引为index的元素赋值为value

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

7.只保留列表指定片段

LTRIM key start stop

LTRIM命令可以删除指定索引范围之外的所有元素。
例:

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

8.向列表中插入元素

 LINSERT key BEFORE|AFTER pivot value

LINSERT命令首先会在List中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER将数据value插入到该元素的前面还是后面。
LINSERT返回插入后列表的个数。

例:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> LINSERT list1 AFTER 3 3.5
(integer) 7
127.0.0.1:6379> LRANGE list1 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "3.5"
6) "2"
7) "1"

9.将元素从一个列表转到另一个列表

RPOPLPUSH source destination

RPOPLPUSH这个命令从名字可以看出其功能:先执行RPOP命令再执行LPUSH命令。它先从source列表类型键的右边弹出一个元素,然后再将其加入到destination列表类型键的右边,并返回这个元素的值,该过程是原子的。
例:

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

猜你喜欢

转载自blog.csdn.net/cl2010abc/article/details/80372720