1.LINDEX
返回列表key中,下标为index的元素
下标(index)参数start和top都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
你也可以使用负数下标,以-1表示列表的最后一个元元素,-2表示列表的倒数第二个元素,以此类推。
如果Key不是列表类型,返回 一个错误。
返回值:
列表中下标为index的元素。
如果index参数的值不在列表的区间范围内(out of range),返回nil。
命令:
redis> LPUSH mylist "World" (integer) 1 redis> LPUSH mylist "Hello" (integer) 2 redis> LINDEX mylist 0 "Hello" redis> LINDEX mylist -1 "World" redis> LINDEX mylist 3 # index不在 mylist 的区间范围内 (nil)2.LINSERT
LINSERT key before|after pivot value
将值value插入到列表key当中,位于值pivot之前或之后。
当pivot不存在于列表key时,不执行任何操作。
当key不存在时,key被视为空列表,不执行任何操作。
如果key不是列表类型,返回一个错误。
返回值:
如果命令执行成功,返回插入操作完成之后,列表的长度。
如果没有找到pivot,返回-1。
如果key不存在或或为空列表,返回0。
命令:
redis> RPUSH mylist "Hello" (integer) 1 redis> RPUSH mylist "World" (integer) 2 redis> LINSERT mylist BEFORE "World" "There" (integer) 3 redis> LRANGE mylist 0 -1 1) "Hello" 2) "There" 3) "World" # 对一个非空列表插入,查找一个不存在的 pivot redis> LINSERT mylist BEFORE "go" "let's" (integer) -1 # 失败 # 对一个空列表执行 LINSERT 命令 redis> EXISTS fake_list (integer) 0 redis> LINSERT fake_list BEFORE "nono" "gogogog" (integer) 0 # 失败3.LLEN
LLEN key
返回列表key的长度
如果key不存在,则key被解释为一个空列表,返回0。
如果key不是列表类型,返回一个错误。
返回值:
列表key的长度。
命令:
# 空列表 redis> LLEN job (integer) 0 # 非空列表 redis> LPUSH job "cook food" (integer) 1 redis> LPUSH job "have lunch" (integer) 2 redis> LLEN job (integer) 2 4.LPOPLPOP key
移除并返回列表key的头元素。
返回值:
列表的头元素。
当key不存在时,返回nil。
命令:
redis> LLEN course (integer) 0 redis> RPUSH course algorithm001 (integer) 1 redis> RPUSH course c++101 (integer) 2 redis> LPOP course # 移除头元素并返回的是移除的头元素 "algorithm001" 5.LPUSHLPUSH key value [value...]
将一个或多个值value插入到列表key的表头
如果有多个value值,那么各个value值按从左到右的顺序依次插入表头:比如说,对空列表mylist执行命令LPUSH a b c,列表的值将是c b a,这等同于原子性地执行LPUSH mylist a,LPUSH mylist b,LPUSH mylist c三个命令。
如果key不存在,一个空列表会被创建并执行LPUSH操作。
当key存在但不是列表类型时,返回一个错误。
返回值:
执行LPUSH命令后,列表的长度。
命令:
# 加入单个元素 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 6.LPUSHXLPUSHX key value
将值value插入到列表key的表头,当且仅当key存在并且是一个非空列表
和LPUSH命令相反,当key不存在时,LPUSHX命令什么也不做。
返回值:
LPUSHX命令执行之后,表的长度。
命令:
# 对空列表执行 LPUSHX redis> LLEN greet # greet 是一个空列表 (integer) 0 redis> LPUSHX greet "hello" # 尝试 LPUSHX,失败,因为列表为空 (integer) 0 # 对非空列表执行 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" 7.LRANGELRANGE key start stop
返回列表key中指定区间内的元素,区间以偏移量start和stop指定。
下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
超出范围的下标:
超出范围的下标值不会引起错误。
如果start下标比列表的最大下标end(LLEN list减1)还要大,那么LRAGE返回一个空列表。
如果stop下标比end下标还要大,redis将stop的值设置为end。
返回值:
一个列表,包含指定区间内的元素。
命令:
redis> RPUSH fp-language lisp (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" 8.LREMLREM key count value
根据参数count的值,移除列表中与参数value相等的元素。
count的值可以是以下几种:
①count>0:从表头开始向表尾搜索,移除与value相等的元素,数量为count
②count<0:从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。
③count=0:移除表中所有与value相等的值。
返回值:
被移除元素的数量
因为不存在的key被视作空表,所以当key不存在时,LREM命令总是返回0。
命令:
# 先创建一个表,内容排列是 # morning hello morning helllo morning redis> LPUSH greet "morning" (integer) 1 redis> LPUSH greet "hello" (integer) 2 redis> LPUSH greet "morning" (integer) 3 redis> LPUSH greet "hello" (integer) 4 redis> LPUSH greet "morning" (integer) 5 redis> LRANGE greet 0 4 # 查看所有元素 1) "morning" 2) "hello" 3) "morning" 4) "hello" 5) "morning" redis> LREM greet 2 morning # 移除从表头到表尾,最先发现的两个 morning (integer) 2 # 两个元素被移除 redis> LLEN greet # 还剩 3 个元素 (integer) 3 redis> LRANGE greet 0 2 1) "hello" 2) "hello" 3) "morning" redis> LREM greet -1 morning # 移除从表尾到表头,第一个 morning (integer) 1 redis> LLEN greet # 剩下两个元素 (integer) 2 redis> LRANGE greet 0 1 1) "hello" 2) "hello" redis> LREM greet 0 hello # 移除表中所有 hello (integer) 2 # 两个 hello 被移除 redis> LLEN greet (integer) 0 9.LSETLSET key index value
将列表key下标为index的元素的值设置为value。
当index参数超出范围,或对一个空列表(key不存在)进行LSET时,返回一个错误。
返回值:
操作成功返回OK,否则返回错误信息。
命令:
# 对空列表(key 不存在)进行 LSET redis> EXISTS list (integer) 0 redis> LSET list 0 item (error) ERR no such key # 对非空列表进行 LSET redis> LPUSH job "cook food" (integer) 1 redis> LRANGE job 0 0 1) "cook food" redis> LSET job 0 "play game" #相当于对job的第一个元素进行重新设置值 OK redis> LRANGE job 0 0 1) "play game" # index 超出范围 redis> LLEN list # 列表长度为 1 (integer) 1 redis> LSET list 3 'out of range' (error) ERR index out of range 10.LTRIMLTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间内的元素都将被删除。
举个例子,执行命令LTRIM list 0 2,表示只保留列表list的前三个元素,其余元素全部删除。
下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
当key不是列表类型时,返回一个错误。
LTRIM命令通常和LPUSH命令和RPUSH命令配合使用,举个例子:
LPUSH log newest_log LTRIM log 0 99 这个例子模拟了一个日志程序,每次将最新日志 newest_log 放到 log 列表中,并且只保留最新的 100 项。注意当这样使用 LTRIM 命令时,时间复杂度时 o(1), 因为平均情况下,每次只有一个元素被移除。超出范围的下标
超出范围的下标值不会引起错误。
如果 start 下标比列表的最大下标 end ( LLEN list 减去1 )还要大,或者start > stop,LTRIM返回一个空列表(因为LTRIM已经将整个列表清空)。
如果 stop 下标比 end 下标还要大,Redis将stop的值设置为end。
返回值:
命令执行成功时,返回OK。
命令:
# 情况 1: 常见情况, start 和 stop 都在列表的索引范围之内 redis> LRANGE alpha 0 -1 # alpha 是一个包含 5 个字符串的列表 1) "h" 2) "e" 3) "l" 4) "l" 5) "o" redis> LTRIM alpha 1 -1 # 删除 alpha 列表索引为 0 的元素 OK redis> LRANGE alpha 0 -1 # "h" 被删除了 1) "e" 2) "l" 3) "l" 4) "o" # 情况 2: stop 比列表的最大下标还要大 redis> LTRIM alpha 1 10086 # 保留 alpha 列表索引 1 至索引 10086 上的元素 OK redis> LRANGE alpha 0 -1 # 只有索引 0 上的元素 "e" 被删除了,其他元素还在 1) "l" 2) "l" 3) "o" # 情况 3: start 和 stop 都比列表的最大下标要大,并且 start < stop redis> LTRIM alpha 10086 123321 OK redis> LRANGE alpha 0 -1 # 列表被清空 (empty list or set) # 情况 4: start 和 stop 都比列表的最大下标要大,并且 start > stop redis> RPUSH new-alpha "h" "e" "l" "l" "o" # 重新建立一个新列表 (integer) 5 redis> LRANGE new-alpha 0 -1 1) "h" 2) "e" 3) "l" 4) "l" 5) "o" redis> LTRIM new-alpha 123321 10086 # 执行 LTRIM OK redis> LRANGE new-alpha 0 -1 # 同样被清空 (empty list or set) 11.BPOP BPOP key 移除并返回列表key的尾元素。 返回值: 列表的尾元素。 当key不存在时,返回nil。 命令: 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"11.RPOP
RPOP key
移除并返回列表key的尾元素。
返回值:
列表的尾元素。
当key不存在时,返回nil。
命令:
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"