redis list类型
一、查看list类型的命令
二、list命令详解
?
?
一、查看list类型的命令
1、在终端数据 help @list
127.0.0.1:6379>help @list
BLPOP key [key ...] timeout
summary: Remove and get the first element ina list, or block until one is ava
ilable
since: 2.0.0
?
BRPOP key [key ...] timeout
summary: Remove and get the last element in alist, or block until one is avai
lable
since: 2.0.0
?
BRPOPLPUSH source destination timeout
summary: Pop a value from a list, push it toanother list and return it; or bl
ockuntil one is available
since: 2.2.0
?
LINDEX key index
summary: Get an element from a list by itsindex
since: 1.0.0
……
?
?
?
?
?
二、list命令详解
头元素和尾元素
头元素指的是列表左端/前端第一个元素,尾元素指的是列表右端/后端第一个元素。
举个例子,列表list包含三个元素:x, y, z,其中x是头元素,而z则是尾元素。
空列表
指不包含任何元素的列表,Redis将不存在的key也视为空列表。
?
1、lpush
lpush key value [value ...]
将值value插入到列表key的表头。
如果key不存在,一个空列表会被创建并执行lpush操作。
当key存在但不是列表类型时,返回一个错误。
时间复杂度:
O(1)
返回值:
执行lpush命令后,表的长度。
Note
在Redis 2.3版本以前的lpush命令,都只接受单个value值。
127.0.0.1:6379>lpush word d
(integer)1
127.0.0.1:6379>lpush word a
(integer)2
127.0.0.1:6379>lpush word b
(integer)3
127.0.0.1:6379>lrange word 0 -1 # 显示列表内所有元素
1)"b"
2)"a"
3)"d"
?
2、lpushx
lpushx key value
将值value插入到列表key的表头,当且仅当key存在并且是一个列表。
和lpush命令相反,当key不存在时,lpushx命令什么也不做。
时间复杂度:
O(1)
返回值:
lpushx命令执行之后,表的长度。
#情况1:对空列表执行lpushx
127.0.0.1:6379>llen greet # greet是一个空列表
(integer)0
127.0.0.1:6379>lpushx greet "hello" # 尝试lpushx,失败,因为列表为空
(integer)0
#情况2:对非空列表执行lpushx
127.0.0.1:6379>lpush greet "hello" # 先用lpush创建一个有一个元素的列表
(integer)1
127.0.0.1:6379>lpushx greet "good morning" #这次lpushx执行成功
(integer)2
127.0.0.1:6379>lrange greet 0 -1
1)"good morning"
2)"hello"
?
3、rpush
rpush key value [value ...]
将值value插入到列表key的表尾。
如果key不存在,一个空列表会被创建并执行rpush操作。
当key存在但不是列表类型时,返回一个错误。
时间复杂度:
O(1)
返回值:
执行rpush操作后,表的长度。
Note
在Redis 2.3版本以前的rpush命令,都只接受单个value值。
127.0.0.1:6379>llen fp-language # 显示列表中的元素数量
(integer)0
127.0.0.1:6379>rpush fp-language lisp
(integer)1
127.0.0.1:6379>lrange fp-language 0 0 # 显示列表中的元素
1)"lisp"
127.0.0.1:6379>rpush fp-language scheme
(integer)2
127.0.0.1:6379>lrange fp-language 0 1 # 显示列表中的元素
1)"lisp"
2)"scheme"
?
4、rpushx
rpushx key value
将值value插入到列表key的表尾,当且仅当key存在并且是一个列表。
和rpush命令相反,当key不存在时,rpushx命令什么也不做。
时间复杂度:
O(1)
返回值:
rpushx命令执行之后,表的长度。
#情况1:key不存在
127.0.0.1:6379>llen greet
(integer)0
127.0.0.1:6379>rpushx greet "hello" # 对不存在的key进行rpushx,PUSH失败。
(integer)0
#情况2:key存在且是一个非空列表
127.0.0.1:6379>rpush greet "hi" # 先用rpush插入一个元素
(integer)1
127.0.0.1:6379>rpushx greet "hello" # greet现在是一个列表类型,rpushx操作成功。
(integer)2
127.0.0.1:6379>lrange greet 0 -1
1)"hi"
2)"hello"
?
5、lpop
lpop key
移除并返回列表key的头元素。
时间复杂度:
O(1)
返回值:
列表的头元素。
当key不存在时,返回nil。
127.0.0.1:6379>llen course
(integer)0
127.0.0.1:6379>rpush course algorithm001
(integer)1
127.0.0.1:6379>rpush course c++101
(integer)2
127.0.0.1:6379>LPOP course # 移除头元素
"algorithm001"
?
6、rpop
rpop key
移除并返回列表key的尾元素。
时间复杂度:
O(1)
返回值:
列表的尾元素。
当key不存在时,返回nil。
127.0.0.1:6379>rpush mylist "one"
(integer)1
127.0.0.1:6379>rpush mylist "two"
(integer)2
127.0.0.1:6379>rpush mylist "three"
(integer)3
127.0.0.1:6379>rpop mylist # 返回被弹出的元素
"three"
127.0.0.1:6379>lrange mylist 0 -1 # 列表剩下的元素
1)"one"
2)"two"
?
7、rlpop
rlpopkey [key ...] timeout
rlpop是列表的阻塞式(blocking)弹出原语。
它是LPOP命