Redis笔记4:数据类型之列表(List)
2017-03-01 16:13
489 查看
命令 | 描述 | 语法 |
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 |
将一个或多个值 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
14、LRANGE key start stop
返回列表中指定区间内的元素,区间以偏移量 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
相关文章推荐
- Redis_列表(list)数据类型
- Redis基础之数据类型(List列表)
- 【Redis源码剖析】 - Redis数据类型之列表List
- Redis数据类型之列表(list)
- Redis数据类型--List(列表)
- Redis学习笔记-List数据类型
- Redis学习笔记---数据类型一(string、list、hash)
- 【Redis源码剖析】 - Redis数据类型之列表List
- Redis数据类型之列表List
- Redis学习手册(List数据类型)
- Redis学习手册(List数据类型)
- Redis学习手册(List数据类型)
- Redis学习手册(List数据类型)
- Redis自学笔记 --Hash、List、Set类型简述
- redis学习笔记二之数据类型
- 二 redis学习笔记之数据类型
- Redis学习手册(List数据类型)
- redis数据类型之list
- Redis复习笔记2—Redis的数据类型
- Redis源码解析4 - 数据类型之 String & List