List:
头元素和尾元素:头元素指的是列表左端/前端第一个元素;尾元素指的是列表右端/后端第一个元素。
举个例子,列表list包含三个元素:x, y, z,其中x是头元素,而z则是尾元素。
空列表:指不包含任何元素的列表,Redis将不存在的key也视为空列表。
1、lpush(left push)方法:
LPUSH key value [value ...]
将一个或多个值value插入到列表key的表头。
如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头:比如对一个空列表(mylist)执行LPUSH mylist a b c,则结果列表为c b a,
等同于执行命令
LPUSH mylist a
LPUSH mylist b
LPUSH mylist c
如果key不存在,一个空列表会被创建并执行LPUSH操作。
当key存在但不是列表类型时,返回一个错误。
例如: # 加入单个元素 redis> LPUSH languages python (integer) 1 # 加入重复元素 redis> LPUSH languages python (integer) 2 redis> LRANGE languages 0 -1 # 列表允许重复元素 1) "python" 2) "python" # 加入多个元素 redis> LPUSH mylist a b c (integer) 3 redis> LRANGE mylist 0 -1 1) "c" 2) "b" 3) "a"
2、lpushx(left pushx)方法:
LPUSHX key value
将值value插入到列表key的表头,当且仅当key存在并且是一个列表。
和LPUSH命令相反,当key不存在时,LPUSHX命令什么也不做。
例如: # 情况1:对空列表执行LPUSHX redis> LLEN greet # greet是一个空列表 (integer) 0 redis> LPUSHX greet "hello" # 尝试LPUSHX,失败,因为列表为空 (integer) 0 # 情况2:对非空列表执行LPUSHX redis> LPUSH greet "hello" # 先用LPUSH创建一个有一个元素的列表 (integer) 1 redis> LPUSHX greet "good morning" # 这次LPUSHX执行成功 (integer) 2 redis> LRANGE greet 0 -1 1) "good morning" 2) "hello"
3、rpush(right push)方法:
RPUSH key value [value ...]
将一个或多个值value插入到列表key的表尾。
如果有多个value值,那么各个value值按从左到右的顺序依次插入到表尾:
比如对一个空列表(mylist)执行RPUSH mylist a b c,则结果列表为a b c,
等同于执行命令
RPUSH mylist a、
RPUSH mylist b、
RPUSH mylist c。
如果key不存在,一个空列表会被创建并执行RPUSH操作。
当key存在但不是列表类型时,返回一个错误。
备注:在Redis 2.4版本以前的RPUSH命令,都只接受单个value值。
# 添加单个元素 redis> RPUSH languages c (integer) 1 # 添加重复元素 redis> RPUSH languages c (integer) 2 redis> LRANGE languages 0 -1 # 列表允许重复元素 1) "c" 2) "c" # 添加多个元素 redis> RPUSH mylist a b c (integer) 3 redis> LRANGE mylist 0 -1 1) "a" 2) "b" 3) "c"
4、rpushx(right pushx)方法:
RPUSHX key value
将值value插入到列表key的表尾,当且仅当key存在并且是一个列表。
和RPUSH命令相反,当key不存在时,RPUSHX命令什么也不做。
例如: # 情况1:key不存在 redis> LLEN greet (integer) 0 redis> RPUSHX greet "hello" # 对不存在的key进行RPUSHX,PUSH失败。 (integer) 0 # 情况2:key存在且是一个非空列表 redis> RPUSH greet "hi" # 先用RPUSH插入一个元素 (integer) 1 redis> RPUSHX greet "hello" # greet现在是一个列表类型,RPUSHX操作成功。 (integer) 2 redis> LRANGE greet 0 -1 1) "hi" 2) "hello"
5、lpop(left pop)方法:
LPOP key
移除并返回列表key的头元素。
redis> LLEN course (integer) 0 redis> RPUSH course algorithm001 (integer) 1 redis> RPUSH course c++101 (integer) 2 redis> LPOP course # 移除头元素 "algorithm001"
6、rpop(right pop)方法:
RPOP key
移除并返回列表key的尾元素。
redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three" (integer) 3 redis> RPOP mylist # 返回被弹出的元素 "three" redis> LRANGE mylist 0 -1 # 列表剩下的元素 1) "one" 2) "two"
7、llen方法:
LLEN key
返回列表key的长度。
如果key不存在,则key被解释为一个空列表,返回0.
如果key不是列表类型,返回一个错误。
# 情况1:空列表 redis> LLEN job (integer) 0 # 情况2:非空列表 redis> LPUSH job "cook food" (integer) 1 redis> LPUSH job "have lunch" (integer) 2 redis> LLEN job (integer) 2
8、lrange方法:
LRANGE key start end
返回列表key中指定区间内的元素,区间以偏移量start和end指定。
下标(index)参数start和end都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
超出范围的下标
超出范围的下标值不会引起错误。
如果start下标比列表的最大下标end(LLEN list减去1)还要大,或者start > stop,LRANGE返回一个空列表。
如果stop下标比end下标还要大,Redis将stop的值设置为end。
redis> RPUSH fp-language lisp # 插入一个值到列表fp-language (integer) 1 redis> LRANGE fp-language 0 0 1) "lisp" redis> RPUSH fp-language scheme (integer) 2 redis> LRANGE fp-language 0 1 1) "lisp" 2) "scheme"
9、linsert方法: