redis--列表

Posted sd880413

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis--列表相关的知识,希望对你有一定的参考价值。

redis列表是简单的字符串列表,安装插入顺序排序,您可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表可以包含超过40亿个元素。

实例:

技术分享图片
 1 127.0.0.1:6379> flushdb
 2 OK
 3 127.0.0.1:6379> keys *
 4 (empty list or set)
 5 127.0.0.1:6379> lpush runoobkey redis
 6 (integer) 1
 7 127.0.0.1:6379> lpush runoobkey mongodb
 8 (integer) 2
 9 127.0.0.1:6379> lrange runoobkey 0 5
10 1) "mongodb"
11 2) "redis"
View Code

redis列表命令

下表列出了相关的基本命令:

redis Blpop命令移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹元素为止。

blpop命令基本语法如下:

blpop  list1  list2...  listn  timeout

返回值:如果列表为空返回一个nil,否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的key,第二个元素是被弹出元素的值。

技术分享图片
1 127.0.0.1:6379> lrange shidong 0 2
2 1) "44"
3 2) "23"
4 127.0.0.1:6379> keys *
5 1) "zhang"
6 2) "shidong"
7 127.0.0.1:6379> blpop shidong 10#返回含有两个元素的列表,第一个是被弹出元素所属的key,第二个元素是被弹出元素的值。
8 1) "shidong"
9 2) "44"
View Code

 

Brpop命令:

redis  Brpop命令移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

技术分享图片
1 127.0.0.1:6379> lrange shidong 0 2
2 1) "44"
3 2) "23"
4 127.0.0.1:6379> keys *
5 1) "zhang"
6 2) "shidong"
7 127.0.0.1:6379> brpop shidong 2 #返回两个元素,第一个是key,第二个是返回的最后一个元素
8 1) "shidong"
9 2) "23"
View Code

 

Brpoplpush 命令

Brpoplpush 命令从列表中弹出一个值(最后一个元素),并将弹出的元素插入到另外一个列表中并返回它,如果没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

返回值:假如在指定时间内没有任何元素弹出,则返回一个nil和等待时长,反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。

实例:

技术分享图片
 1 127.0.0.1:6379> keys *
 2 (empty list or set)
 3 127.0.0.1:6379> lpush shidong 22
 4 (integer) 1
 5 127.0.0.1:6379> lpush shidong 30
 6 (integer) 2
 7 127.0.0.1:6379> lpush shidong 40
 8 (integer) 3
 9 127.0.0.1:6379> lrange shidong 0 2
10 1) "40"
11 2) "30"
12 3) "22"
13 127.0.0.1:6379> brpoplpush shidong sd 10#从列表弹出一个元素插入另外一个列表,并返回插入的value值
14 "22"
15 127.0.0.1:6379> lrange shidong 0 2
16 1) "40"
17 2) "30"
18 127.0.0.1:6379> brpoplpush shidong sd 10
19 "30"
20 127.0.0.1:6379> lrange shidong 0 2
21 1) "40"
22 127.0.0.1:6379> lrange sd 0 2#查看被插入的列表value值
23 1) "30"
24 2) "22"
View Code

 

lindex命令

该命令用于通过索引获取列表中的元素,你也可以使用负数下表,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

基本语法如下:

lindex  key_name  index_position

返回值:列表中下标为指定索引值的元素,如果指定索引值不在列表的区间范围内,返回nil.

实例:

技术分享图片
 1 127.0.0.1:6379> lrange mylist 0 10
 2 1) "name"
 3 2) "my"
 4 3) "!"
 5 4) "world"
 6 5) "Hello"
 7 127.0.0.1:6379> lindex mylist 0
 8 "name"
 9 127.0.0.1:6379> lrange mylist 0 10
10 1) "name"
11 2) "my"
12 3) "!"
13 4) "world"
14 5) "Hello"
15 127.0.0.1:6379> lindex mylist 2
16 "!"
17 127.0.0.1:6379> lindex mylist -1
18 "Hello"
View Code

 

linsert 命令

该命令用于在列表的元素前或者后插入元素,当指定元素不存在于列表中时,不执行任何操作,当列表不存在时,被视为空列表,不执行任何操作,如果key不是列表类型,返回一个错误。

linsert命令基本语法如下:

linsert  key_name  before  existing_value  new_value

返回值:如果命令执行成功,返回插入操作完成之后,列表的长度,如果没有找到指定元素,返回-1,如果key不存在或为空列表,返回0。

技术分享图片
 1 127.0.0.1:6379> lrange mylist 0 10
 2 1) "to"
 3 2) "welcome"
 4 3) "hello"
 5 4) "world"
 6 127.0.0.1:6379> linsert mylist before "world" "home"
 7 (integer) 5
 8 127.0.0.1:6379> lrange mylist 0 10
 9 1) "to"
10 2) "welcome"
11 3) "hello"
12 4) "home"
13 5) "world"
14 127.0.0.1:6379> linsert mylist before "list" "back"
15 (integer) -1
16 127.0.0.1:6379> linsert list before "list" "back"
17 (integer) 0
View Code

 

llen命令

llen该命令用于返回列表的长度,如果列表key不存在,则key被解释为一个空列表,返回0,如果key不是列表类型,返回一个错误。

llen命令基本语法:llen  key_name

返回值:列表的长度。

实例:

技术分享图片
 1 127.0.0.1:6379> keys *
 2 1) "mylist"
 3 127.0.0.1:6379> lrange mylist 0 10
 4 1) "to"
 5 2) "welcome"
 6 3) "hello"
 7 4) "home"
 8 5) "world"
 9 127.0.0.1:6379> llen mylist #返回列表mylist的长度为5
10 (integer) 5
View Code

 

lpop命令

redis lpop命令用于移除并返回列表的第一个元素。

基本语法如下:lpop  key_name

返回值:列表的第一个元素,当列表key不存在时,返回nil。

实例:

技术分享图片
 1 127.0.0.1:6379> lrange mylist 0 10
 2 1) "to"
 3 2) "welcome"
 4 3) "hello"
 5 4) "home"
 6 5) "world"
 7 127.0.0.1:6379> llen mylist
 8 (integer) 5
 9 127.0.0.1:6379> lpop mylist #取出key为mylist列表的第一个值
10 "to"
11 127.0.0.1:6379> lrange mylist 0 10
12 1) "welcome"
13 2) "hello"
14 3) "home"
15 4) "world"
View Code

 

lpush命令

该命令将一个或多个值插入到列表头部,如果key不存在,一个空列表会被创建并执行lpush操作,当key存在但不是列表类型时,返回一个错误。

基本语法如下:lpush  key_name value1 value2 ... valuen

返回值:执行lpush命令后,列表的长度。

实例:

技术分享图片
1 127.0.0.1:6379> lpush mylist 232 (integer) 5 #5为返回的列表的长度
3 127.0.0.1:6379> lrange mylist 0 -1
4 1) "23\\"
5 2) "welcome"
6 3) "hello"
7 4) "home"
8 5) "world"
View Code

 

lpushx命令

将一个值插入到已存在的列表头部,列表不存在时操作无效。

基本语法:lpushx  key_name  value1 value2 ... valuen

返回值:lpushx命令执行之后,列表的长度。

实例:

技术分享图片
 1 127.0.0.1:6379> lrange mylist 0 -1
 2 1) "23\\"
 3 2) "welcome"
 4 3) "hello"
 5 4) "home"
 6 5) "world"
 7 127.0.0.1:6379> lpushx mylist sdsd #插入到列表头部
 8 (integer) 6
 9 127.0.0.1:6379> lrange mylist 0 -1
10 1) "sdsd"
11 2) "23\\"
12 3) "welcome"
13 4) "hello"
14 5) "home"
15 6) "world"
16 127.0.0.1:6379> lpushx name sd #返回错误,0代表错误
17 (integer) 0
View Code

 

lrange 命令

作用:获取列表指定范围内的元素。

实例:

技术分享图片
1 127.0.0.1:6379> lrange mylist 0 -1
2 1) "sdsd"
3 2) "23\\"
4 3) "welcome"
5 4) "hello"
6 5) "home"
7 6) "world"
View Code

 

lrem 命令

作用:移除列表元素。

基本语法:lrem  key_name  count  value

返回值:被移除元素的数据,列表不存在时返回0.

实例:

技术分享图片
 1 127.0.0.1:6379> keys *
 2 (empty list or set)
 3 127.0.0.1:6379> rpush mylist hello
 4 (integer) 1
 5 127.0.0.1:6379> rpush mylist hello
 6 (integer) 2
 7 127.0.0.1:6379> rpush mylist foo
 8 (integer) 3
 9 127.0.0.1:6379> rpush mylist home
10 (integer) 4
11 127.0.0.1:6379> rpush mylist hello
12 (integer) 5
13 127.0.0.1:6379> rpush mylist home
14 (integer) 6
15 127.0.0.1:6379> rpush mylist hello
16 (integer) 7
17 127.0.0.1:6379> lrange mylist 0 -1
18 1) "hello"
19 2) "hello"
20 3) "foo"
21 4) "home"
22 5) "hello"
23 6) "home"
24 7) "hello"
25 127.0.0.1:6379> lrem mylist -2 "hello"
26 (integer) 2
27 127.0.0.1:6379> lrange mylist 0 -1
28 1) "hello"
29 2) "hello"
30 3) "foo"
31 4) "home"
32 5) "home"
View Code

 

lset 命令

lset命令通过索引来设置元素的值。

当索引参数超出范围,或对一个空列表进行lset时,返回一个错误。

基本语法:lset  key_name  index  value

返回值:操作成功返回ok,否则返回错误信息。

实例:

技术分享图片
 1 127.0.0.1:6379> lrange mylist 0 -1
 2 1) "hello"
 3 2) "hello"
 4 3) "foo"
 5 4) "home"
 6 5) "home"
 7 
 8 127.0.0.1:6379> lrange mylist 0 0
 9 1) "hello"
10 
11 127.0.0.1:6379> lset mylist 0 welcome
12 OK
13 127.0.0.1:6379> lrange mylist 0 0
14 1) "welcome"
15 127.0.0.1:6379> lset mylist 4 "superman"
16 OK
17 127.0.0.1:6379> lrange mylist 0 -1
18 1) "welcome"
19 2) "hello"
20 3) "foo"
21 4) "home"
22 5) "superman"
View Code

 

ltrim命令

ltrim对一个列表进行修复(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

下标0表示列表的第一个元素,以1表示列表的第二个元素,以此类推,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

基本语法:ltrim  key_name  start  stop

实例:

技术分享图片
 1 127.0.0.1:6379> lrange mylist 0 -1
 2 1) "welcome"
 3 2) "hello"
 4 3) "foo"
 5 4) "home"
 6 5) "superman"
 7 127.0.0.1:6379> ltrim mylist 1 3
 8 OK
 9 127.0.0.1:6379> lrange mylist 0 -1
10 1) "hello"
11 2) "foo"
12 3) "home"
View Code

 

以上是关于redis--列表的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段内的列表视图打开链接网址?

如何使列表视图出现在片段中?

Visual Studio 自定义代码片段在方法定义的参数列表中不起作用

架构丰富的代码片段也应该用于产品列表吗?

片段 A 的列表视图中的片段 B 中的新列表视图,单击 A 的列表项

Android,从其他片段返回的空列表视图