Redis

6. Redis List列表相关命令

2015-11-20  本文已影响1207人  大明白

Redis列表是简单的字符串列表,排序插入顺序。您可以在头部或列表的尾部Redis的列表添加元素。

列表的最大长度为232 - 1 (每个列表超过4十亿元素4294967295)元素。

例子

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

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

列表底层实现是双向链表实现的,所有获取头部和尾部的数据时速度最快,越往中间走越慢。如果通过index则效率会降低

LPUSH key value [value]

向链表左端添加元素,values是按左到右依次插入的,返回值为列表中元素个数,列表元素可以重复

127.0.0.1:6379> LPUSH list a b c
(integer) 3
127.0.0.1:6379> LPUSH list a b c
(integer) 6
127.0.0.1:6379> LRANGE list 0 6
1) "c"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"

RPUSH key value [value]

向链表右端添加元素,其他与LPUSH相同

127.0.0.1:6379> RPUSH list d e f
(integer) 9
127.0.0.1:6379> LRANGE list 0 9
1) "c"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"
7) "d"
8) "e"
9) "f"

LPUSHX key value

向列表左端添加元素,只有key存在时才可以添加

127.0.0.1:6379> EXiSTS list1
(integer) 0
127.0.0.1:6379> LPUSHX list1 a
(integer) 0
127.0.0.1:6379> LPUSHX list g
(integer) 10

RPUSHX key value

向列表右端添加元素,其他与LPUSHX相同

LPOP key

将左端列表元素弹出,会将其从列表中删除,如果key不存在则返回(nil)

127.0.0.1:6379> LPOP list
"g"
127.0.0.1:6379> LPOP list
"c"

RPOP key

将右端列表元素弹出,其他同LPOP

LLEN key

返回列表的长度,如果列表不存在则返回0

127.0.0.1:6379> LLEN list
(integer) 8
127.0.0.1:6379> LLEN list1
(integer) 0

LRANGE key start end

获取链表一个区间的值

127.0.0.1:6379> LRANGE list 0 -1
1) "b"  // 获得所有元素
2) "a"
3) "c"
4) "b"
5) "a"
6) "d"
7) "e"
8) "f
127.0.0.1:6379> LRANGE list 0 0
1) "b"

LREM key count value##

删除列表中指定的值,返回值为删除的元素的个数,count值有以下几种:

LINDEX key index

获得指定索引元素的值,如果索引超出范围返回(nil),支持负数下标

127.0.0.1:6379> LINDEX list 2
"f"
127.0.0.1:6379> LINDEX list 100
(nil)
127.0.0.1:6379> LINDEX list -1
"b"

LSET key index value##

设置指定索引元素的值,如果列表不存在或者索引超出范围报错,支持负数下标

127.0.0.1:6379> LSET list 0 g
OK
127.0.0.1:6379> LINDEX list 0
"g"
127.0.0.1:6379> LINDEX list -1
"g"
127.0.0.1:6379> LSET list1 0 a
(error) ERR no such key
127.0.0.1:6379> LSET list 100 g
(error) ERR index out of range

LTRIM key start end

只保留列表片段,支持负数下标,如果区间范围超出所有范围,则列表被清空

127.0.0.1:6379> LLEN list
(integer) 10
127.0.0.1:6379> LTRIM list 0 5
OK
127.0.0.1:6379> LLEN list
(integer) 6
127.0.0.1:6379> LRANGE list  0 100
1) "g"
2) "a"
3) "f"
4) "e"
5) "d"
6) "b"
127.0.0.1:6379> LTRIM list 4 -1
OK
127.0.0.1:6379> LRANGE list  0 100
1) "d"
2) "b"
127.0.0.1:6379> LTRIM list 100 1000
OK  // 列表被清空
127.0.0.1:6379> LLEN list
(integer) 0

LINSERT key BEFORE|AFTER pivot value

向列表插入元素,如果列表中没有pivot则什么都不做

127.0.0.1:6379> LRANGE list 0 -1
 1) "a"
 2) "b"
 3) "c"
 4) "d"
 5) "e"
 6) "f"
 7) "g"
 8) "h"
 9) "i"
10) "j"
11) "k"
127.0.0.1:6379> LINSERT list BEFORE b "redis"
(integer) 12
127.0.0.1:6379> LRANGE list 0 -1
 1) "a"
 2) "redis"
 3) "b"
 4) "c"
 5) "d"
 6) "e"
 7) "f"
 8) "g"
 9) "h"
10) "i"
11) "j"
12) "k"
127.0.0.1:6379> LINSERT list BEFORE z "redis"
(integer) -1

RPOPLPUSH keysource keydestination##

将元素从一个列表转到另一个列表,返回pop的元素,如果原不存在则返回(nil)

127.0.0.1:6379> RPOPLPUSH list list1
"k"
127.0.0.1:6379> LRANGE list1 0 -1
1) "k"
127.0.0.1:6379> RPOPLPUSH list2 list1
(nil)

BLPOP key1 [key2 ] timeout

取出并获取列表中的第一个元素,或阻塞,直到有可用,任意个list有可用都会停止阻塞
如果list中有元素则与LPOP处理相同,如果list为空时,会阻塞直到有可用的值,或者timeout,当timeout设定为0时会一直等待

127.0.0.1:6379> EXISTS list
(integer) 0
127.0.0.1:6379> BLPOP list 0
//本线程阻塞,在另外一个线程插入元素 LPUSH list a
1) "list"
2) "a"
(8.96s)

BRPOP key1 [key2 ] timeout

取出并获取列表中的最后一个元素,或阻塞,直到有可用,逻辑与BLPOP相同

BRPOPLPUSH source destination timeout

从source列表中弹出一个值,它推到destination列表并返回它;或阻塞,直到source中有可用。

上一篇 下一篇

猜你喜欢

热点阅读