命令 | 描述 | 语法 |
LPUSH | 在list头部添加多个值 | LPUSH key value [value ...] |
LPUSHX | Key存在则添加值,否则不做操作 | LPUSHX key value |
RPUSH | 在list尾部添加多个值 | RPUSH key value [value ...] |
RPUSHX | 在list尾部添加单个值 | RPUSHX key value |
LPOP | 从头部移除列表中的key | LPOP key |
RPOP | 从尾部移除列表中的key | RPOP key |
LINDEX | 返回下标中的值 | LINDEX key index |
LLEN | 返回key的长度 | LLEN key |
LREM | 删除前面几个值等于某值的元素 | LREM key count value |
LTRIM | 截取list中的值 | LTRIM key start stop |
LSET | 给下标赋值 | LSET key index value |
RPOPLPUSH | 从一个集合尾部移除值并插入到另一个集合的头部 | RPOPLPUSH source destination |
LINSERT | 在某个值的前面或者后面插入值 | LINSERT key BEFORE|AFTER pivot value |
LRANGE | 返回列表中指定区间内的元素 | LRANGE key start stop |
1、LPUSH key value [value …]
将一个或多个值 value 插入到列表 key 的表头如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头。如果 key 不存在,一个空列表会被创建并执行LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。返回值: 执行LPUSH 命令后,列表的长度。
示例:
127.0.0.1:6379> LPUSH languages chinese english japanese
(integer) 3
127.0.0.1:6379> LRANGE languages 0 -1
1) "japanese"
2) "english"
3) "chinese"
2、LPUSHX key value
将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表才能插入。
返回值: LPUSHX 命令执行之后,表的长度。
示例:
127.0.0.1:6379> LPUSHX mylist "hello"
(integer) 0
127.0.0.1:6379> LPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> LPUSHX mylist "redis"
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "redis"
2) "hello"
3、RPUSH key value [value …]
将一个或多个值 value 插入到列表 key 的表尾 (最右边)。
返回值: 执行RPUSH 操作后,表的长度。
示例:
127.0.0.1:6379> RPUSH mylist a b c
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "a"
2) "b"
3) "c"
4、RPUSHX key value
将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表才能插入。
返回值: RPUSHX 命令执行之后,表的长度。
示例:
127.0.0.1:6379[15]> LLEN greet
(integer) 0
127.0.0.1:6379[15]> LPUSHX greet "hello"
(integer) 0
127.0.0.1:6379[15]> LPUSH greet "hello"
(integer) 1
127.0.0.1:6379[15]> LPUSHX greet "good morning"
(integer) 2
127.0.0.1:6379[15]> LRANGE greet 0 -1
1) "good morning"
2) "hello"
5、LPOP key
移除并返回列表 key 的头元素。
返回值: 列表的头元素。当 key 不存在时,返回 nil 。
示例:
127.0.0.1:6379> LPUSH company google baidu sina 360
(integer) 4
127.0.0.1:6379> LRANGE company 0 -1
1) "360"
2) "sina"
3) "baidu"
4) "google"
127.0.0.1:6379> LPOP company
"360"
127.0.0.1:6379> LPOP company
"sina"
127.0.0.1:6379> LPOP company
"baidu"
127.0.0.1:6379> LPOP company
"google"
127.0.0.1:6379> LPOP company
(nil)
6、RPOP key
移除并返回列表 key 的尾元素。
返回值: 列表的尾元素。当 key 不存在时,返回 nil 。
示例:
127.0.0.1:6379[15]> RPUSH mylist "one"
(integer) 1
127.0.0.1:6379[15]> RPUSH mylist "two"
(integer) 2
127.0.0.1:6379[15]> RPUSH mylist "three"
(integer) 3
127.0.0.1:6379[15]> RPOP mylist
"three"
127.0.0.1:6379[15]> LRANGE mylist 0 -1
1) "one"
2) "two"
7、LINDEX key index
返回列表 key 中,下标为 index 的元素。 下标 (index) 参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素,-2 表示列表的倒数第二个元素,以此类推。如果 key 不是列表类型,返回一个错误
返回值: 列表中下标为 index 的元素。如果 index 参数的值不在列表的区间范围内 (out of range),返回 nil 。
示例:
127.0.0.1:6379> LPUSH mylist "hello" "redis"
(integer) 2
127.0.0.1:6379> LINDEX mylist 0
"redis"
127.0.0.1:6379> LINDEX mylist 1
"hello"
127.0.0.1:6379> LINDEX mylist 2
(nil)
127.0.0.1:6379> LINDEX mylist -1
"hello"
127.0.0.1:6379> LINDEX mylist 0
"redis"
8、LLEN key
返回列表 key 的长度。如果 key 不存在,则 key 被解释为一个空列表,返回 0 。如果 key 不是列表类型,返回一个错误。
返回值: 列表 key 的长度。
示例:
127.0.0.1:6379[15]> LLEN job
(integer) 0
127.0.0.1:6379[15]> LPUSH job "cook food"
(integer) 1
127.0.0.1:6379[15]> LPUSH job "have lunch"
(integer) 2
127.0.0.1:6379[15]> LLEN job
(integer) 2
9、LREM key count value
移除列表中与参数 value 相等的 count 个元素。
count 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
返回值:被移除元素的数量。因为不存在的 key 被视作空表 (empty list),所以当 key 不存在时,LREM 命令总是返回 0 。
示例:
127.0.0.1:6379[15]> LPUSH greet "morning"
(integer) 1
127.0.0.1:6379[15]> LPUSH greet "hello"
(integer) 2
127.0.0.1:6379[15]> LPUSH greet "morning"
(integer) 3
127.0.0.1:6379[15]> LPUSH greet "hello"
(integer) 4
127.0.0.1:6379[15]> LPUSH greet "morning"
(integer) 5
127.0.0.1:6379[15]> LRANGE greet 0 -1
1) "morning"
2) "hello"
3) "morning"
4) "hello"
5) "morning"
127.0.0.1:6379[15]> LREM greet 2 morning
(integer) 2
127.0.0.1:6379[15]> LLEN greet
(integer) 3
127.0.0.1:6379[15]> LRANGE greet 0 -1
1) "hello"
2) "hello"
3) "morning"
127.0.0.1:6379[15]> LREM greet -1 morning
(integer) 1
127.0.0.1:6379[15]> LLEN greet
(integer) 2
127.0.0.1:6379[15]> LRANGE greet 0 -1
1) "hello"
2) "hello"
127.0.0.1:6379[15]> LREM greet 0 hello
(integer) 2
127.0.0.1:6379[15]> LLEN greet
(integer) 0
10、LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
返回值:命令执行成功时,返回 ok 。
示例:
127.0.0.1:6379> RPUSH mylist "hello" "hello" "my" "redis"
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello"
3) "my"
4) "redis"
127.0.0.1:6379> LTRIM mylist 1 -1
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "my"
3) "redis"
11、RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
返回值: 被弹出的元素。
示例:
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 3
redis 127.0.0.1:6379> RPOPLPUSH mylist myotherlist
"bar"
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
12、LSET key index value
将列表 key 下标为 index 的元素的值设置为 value 。 当 index 参数超出范围,或对一个空列表 ( key 不存在) 进行LSET 时,返回一个错误。
返回值: 操作成功返回 ok ,否则返回错误信息。
示例:
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
redis 127.0.0.1:6379> LSET mylist 0 "bar"
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1: "bar"
2) "hello"
3) "foo"
4) "hello"
13、LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。
返回值: 如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到 pivot ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。
示例:
127.0.0.1:6379[15]> RPUSH mylist "Hello"
(integer) 1
127.0.0.1:6379[15]> RPUSH mylist "World"
(integer) 2
127.0.0.1:6379[15]> LINSERT mylist BEFORE "World" "There"
(integer) 3
127.0.0.1:6379[15]> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"
127.0.0.1:6379[15]> LINSERT mylist BEFORE "go" "let's"
(integer) -1
127.0.0.1:6379[15]> EXISTS fake_list
(integer) 0
127.0.0.1:6379[15]> LINSERT fake_list BEFORE "nono" "gogogog"
(integer) 0
返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
返回值:一个列表,包含指定区间内的元素。
示例:
127.0.0.1:6379> RPUSH user "zhangsan" "lisi" "wangwu" "zhaoliu" "tianqi"
(integer) 5
127.0.0.1:6379> LRANGE user 0 -1#返回所有
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "zhaoliu"
5) "tianqi"
127.0.0.1:6379> LRANGE user -1 0#返回空
(empty list or set)
127.0.0.1:6379> LRANGE user 1 2#返回多个
1) "lisi"
2) "wangwu"
127.0.0.1:6379> LRANGE user 1 1#返回一个
1) "lisi"
总结:
1.它是一个字符串链表,left、right都可以插入添加;
2.如果键不存在,则创建新的链表;
3.如果键已存在,则新增内容;
4.如果值全移除,对应的键也就消失了;
5.链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
(完毕!)
参考:http://blog.csdn.net/thinkercode/article/details/46565051