本文参考:http://redisdoc.com/list/index.html
BLPOP
BLPOP key[key ...] timeout:BLPOP是列表的阻塞式(blocking)弹出原语。是LPOP命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将会被BLPOP 命令阻塞,直到等待超时,会有可弹出元素为止。
当给定多个key参数的时候,按参数key的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。
DEl job command request#删除元素
0
LPUSH command "update system"#添加元素
1
LPUSH request "visit page"
1
BLPOP job command request 0#弹出存在元素的第一个非空列表
command#表名
update system#第一个元素
如果所有给定的key都为空列表会不存在,那么BLPOP命令将阻塞连接,直到等待超时会其他客户端调用LPUSH或RPUSH命令为列表添加元素。
redis> EXISTS job # 确保两个 key 都不存在
(integer) 0
redis> EXISTS command
(integer) 0
redis> BLPOP job command 300 # 因为key一开始不存在,所以操作会被阻塞,直到另一客户端对 job 或者 command 列表进行 PUSH 操作。
1) "job" # 这里被 push 的是 job
2) "do my home work" # 被弹出的值
(26.26s) # 等待的秒数
redis> BLPOP job command 5 # 等待超时的情况
(nil)
(5.66s) # 等待的秒数
相同的key可以被多个客户端阻塞。客户端被放进一个队列中,按照先进先出的方式,为key执行BLPOP命令。
一个被包裹在MULTI/EXEC块内的BLPOP命令,行为变现的和LPOP一样,对空列表返回nil,非空列表弹出对应元素。
RPUSH job programming
1
MULTI
OK
BLPOP job 10
QUEUED
EXEC#执行非空列表,立即返回
job
programming
LLEN job
0
MULTI
OK
BLPOP job 5
QUEUED
EXEC#执行空列表,返回nil
(nil)
BRPOP
BRPOP key[key ...] timeout:BRPOP是列表的阻塞式弹出原语。他是RPOP命令的阻塞式。和BLPOP使用基本相同。
BRPOPLPUSH
BRPOPLPUSH source destination timeout:BRPOPLPUSH是RPOPLPUSH的阻塞版本,当给定列表source不为空 时,两者表现相同。当列表为空时,BRPOPLPUSH命令将阻塞连接,知道等待超时,会有其他客户端执行push操作。
返回值:在指定时间没有任何元素被弹出,则返回一个nil和等待时长。反之,返回一个两个元素列表,包含弹出元素的值和等待时长。
BRPOPLPUSH msg reciver 10#空列表
(nil)
(10.33s)
LPUSH msg "hello"
1
BRPOPLPUSH msg reciver 10#非空 列表
hello
LLEN reciver
1
LINDEX
LINDEX key index:返回列表key中,下表为index的元素。
返回值:列表中下标为index的元素。如果index参数的值不在列表的区间范围内,返回nil。
LPUSH mylist "World"
1
LPUSH mylist "HELLO"
2
LINDEX mylist 0
HELLO
LINDEX mylist -1
World
LINSERT
LINSERT key BEFORE|AFTER pivot value:将值value插入到列表key当中,位于值pivot之前或之后。
当pivot不存在时,不执行任何操作。当key不存在时,不执行任何操作。
当key不是列表类型,返回一个错误。
返回值:执行成功,返回操作后的列表长度。如果找不到pivot,返回-1。key不存在,返回0。
LINSERT mylist BEFORE "World" "Three"
3
LRANGE mylist 0 -1
HELLO
Three
World
LLEN
LLEN key:返回列表的长度,如果列表不存在返回0.如果key不是列表类型,返回一个错误。
返回值:列表长度。
LLEN job
1
LPUSH job "sda"
2
LLEN job
2
LPOP
LPOP key:移除并返回列表key的头元素。
返回值:列表的头元素。当key不存在时,返回nil。
LLEN course
0
RPUSH course 01
1
RPUSH course 02
2
LPOP course
01
LLEN course
1
LPUSH
LPUSH key value [value ...]:将一个或多个value插入到列表的表头。如果有多个value。那么value值按照从左到右的顺序依次插入。
如果key不存在,那么一个空列表会被创建并执行LPUSH操作。
返回值:执行后列表的长度。
LPUSH languages python
1
LPUSH languages python
2
LRANGE languages 0 -1
python
python
LPUSH languages a b c
5
LRANGE languages 0 -1
c
b
a
python
python
LPUSHX
LPUSHX key value:将值value插入到列表的表头,当且仅当key存在并且是一个列表。与LPUSH命令相反,当key不存在时,LPUSHX命令什么也不做。
返回值:LPUSHX命令执行后,表的长度。
LLEN greet
0
LPUSHX greet "hello"
0
LPUSH greet "hello"
1
LPUSHX greet "hello"
2
LRANGE greet 0 -1
hello
hello
LRANGE
LRANGE key start stop:返回列表区间内元素,区间偏移量以start stop指定。start stop闭区间内的元素会返回,比如 0 10 返回11个元素。
RPUSH language lisp
1
RPUSH language java
2
LRANGE language 0 0
lisp
LRANGE language 0 1
lisp
java
LREM
LREM key count value:根据参数count的值,移除列表中与参数value相等的元素。
count大于0,从表头移除。
count小于0,从表尾移除。
count等于0,移除所有与value相等的值。
返回值:被移除的元素的数量。
LPUSH greet "morning"
1
LPUSH greet "hello"
2
LPUSH greet "morning"
3
LPUSH greet "hello"
4
LPUSH greet "morning"
5
LRANGE greet 0 4
morning
hello
morning
hello
morning
LREM greet 2 morning
2
LLEN morning
0
LLEN greet
3
LREM greet -1 morning
1
LLEN greet
2
LRANGE greet 0 -1
hello
hello
LSET
LSET key index value:将列表key下标index的元素值设为value。
返回值:操作成功返回ok,否则返回错误信息。
EXISTS list
0
LSET list 0 item
ERR no such key
LPUSH job "cook"
1
LRANGE job 0 0
cook
LSET job 0 "play game"
OK
LRANGE job 0 -1
play game
LTRIM
LTRIM key start stop:对一个列表进行修剪操作,让列表只保留指定区域内的元素,不在区域内的元素将被删除。
返回值:命令执行成功,返回ok。
LPUSH alpha a b c d e f g
7
LTRIM alpha 1 -1
OK
LRANGE alpha 0 -1
f
e
d
c
b
a
LTRIM alpha 1 -1
OK
LRANGE alpha 0 -1
e
d
c
b
a
RPOP
RPOP key:移除并返回列表的尾元素。
返回值:列表的尾元素。
LRANGE alpha 0 -1
e
d
c
b
a
RPOP alpha
a
LRANGE alpha 0 -1
e
d
c
b
RPOPLPUSH
RPOPLPUSH source destination:在一个原子时间内执行:1)将列表source中的最后一个元素弹出,并返回给客户端。将source元素弹出的元素插入列表destination,作为destination列表的头元素。
返回值:被弹出的元素。
LRANGE alpha 0 -1
e
d
c
b
RPOPLPUSH alpha reciver
b
LRANGE alpha 0 -1
e
d
c
LRANGE reciver 0 -1
b
RPOPLPUSH alpha reciver
c
LRANGE alpha 0 -1
e
d
LRANGE reciver 0 -1
c
b
RPUSH
RPUSH key value[value .. ]:将一个或多个值value插入到列表key的表尾。如果多个key,那么按照从左到右的顺序插入到列表。
返回值:执行操作后,表的长度。
RPUSH language c
1
LRANGE language 0 -1
c
RPUSH language a b c
4
LRANGE language 0 -1
c
a
b
c
RPUSHX
RPUSHX key value:将值插入列表key的表尾,当且仅当key存在并且是一个列表。当key不存在时,不进行任何操作。
返回值:表的长度。
LLEN greet
0
RPUSHX greet "hello"
0
RPUSH greet a
1
RPUSHX greet "hello"
2