Redis 列表是简单的字符串列表, 按照插入顺序排序你可以添加一个元素到列表的头部 (左边) 或者尾部(右边)
一个列表最多可以包含 \(2^{32} - 1\) 个元素 (4294967295, 每个列表超过 40 亿个元素)
实例
- redis 127.0.0.1:6379> LPUSH mylist redis
- (integer) 1
- redis 127.0.0.1:6379> LPUSH mylist mongodb
- (integer) 2
- redis 127.0.0.1:6379> LPUSH mylist mysql
- (integer) 3
- redis 127.0.0.1:6379> LRANGE mylist 0 10
- 1) "mysql"
- 2) "mongodb"
- 3) "redis"
在以上实例使用了 LPUSH 将三个值插入了名为 mylist 的列表当中
Redis List 命令
Lpush & Rpush
Redis Lpush 命令将一个或多个值插入到列表头部执行 Lpush 操作后, 列表的长度
如果 列表 不存在, 一个空列表会被创建并执行 LPUSH 操作 当 列表 存在但不是列表类型时, 返回一个错误
- 127.0.0.1:6379> LPUSH list1 "foo"
- (integer) 1
- 127.0.0.1:6379> LPUSH list1 "bar"
- (integer) 2
- 127.0.0.1:6379> LRANGE list1 0 -1
- 1) "bar"
- 2) "foo"
Redis Rpush 命令用于将一个或多个值插入到列表的尾部 (最右边) 执行 RPUSH 操作后, 列表的长度
如果列表不存在, 一个空列表会被创建并执行 RPUSH 操作 当列表存在但不是列表类型时, 返回一个错误
- 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> LRANGE mylist 0 -1
- 1) "hello"
- 2) "foo"
- 3) "bar"
注意: 以上命令在 Redis 2.4 版本以前的 RPUSH 命令, 都只接受单个 value 值
Lpushx & Rpushx
Redis Lpushx 将一个值插入到已存在的列表头部, 列表不存在时操作无效
- 127.0.0.1:6379> LPUSH list1 "foo"
- (integer) 1
- 127.0.0.1:6379> LPUSHX list1 "bar"
- (integer) 2
- 127.0.0.1:6379> LPUSHX list2 "bar"
- (integer) 0
- 127.0.0.1:6379> LRANGE list1 0 -1
- 1) "bar"
- 2) "foo"
Redis Rpushx 命令用于将一个值插入到已存在的列表尾部 (最右边) 如果列表不存在, 操作无效
- 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> RPUSHX mylist2 "bar"
- (integer) 0
- redis 127.0.0.1:6379> LRANGE mylist 0 -1
- 1) "hello"
- 2) "foo"
- Blpop & Brpop & Brpoplpush
Redis Blpop 命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
redis 127.0.0.1 : 6379 > BLPOP list1 100
在以上实例中, 操作会被阻塞, 如果指定的列表 key list1 存在数据则会返回第一个元素, 否则在等待 100 秒后会返回 nil
(nil) (100.06s)
Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
redis 127.0.0.1 : 6379 > BRPOP list1 100
在以上实例中, 操作会被阻塞, 如果指定的列表 key list1 存在数据则会返回第一个元素, 否则在等待 100 秒后会返回 nil
(nil) (100.06s)
Redis Brpoplpush 命令从列表中弹出一个值, 将弹出的元素插入到另外一个列表中并返回它; 假如在指定时间内没有任何元素被弹出, 则返回一个 nil 和等待时长 反之, 返回一个含有两个元素的列表, 第一个元素是被弹出元素的值, 第二个元素是等待时长
- # 非空列表
- redis> BRPOPLPUSH msg reciver 500
- "hello moto" # 弹出元素的值
- (3.38s) # 等待时长
- redis> LLEN reciver
- (integer) 1
- redis> LRANGE reciver 0 0
- 1) "hello moto"
- # 空列表
- redis> BRPOPLPUSH msg reciver 1
- (nil)
- (1.34s)
- Lpop & Rpop
Redis Lpop 命令用于移除并返回列表的第一个元素
- 127.0.0.1:6379> LRANGE list1 0 -1
- 1) "field1"
- 2) "myhash"
- 3) "`list1`"
- 4) "list1"
- 5) "0"
- 6) "bar"
- 7) "foo"
- 8) "foo"
- 127.0.0.1:6379> LPOP list1
- "field1"
- 127.0.0.1:6379> LRANGE list1 0 -1
- 1) "myhash"
- 2) "`list1`"
- 3) "list1"
- 4) "0"
- 5) "bar"
- 6) "foo"
- 7) "foo"
- 127.0.0.1:6379>
Redis Rpop 命令用于移除并返回列表的最后一个元素
- 127.0.0.1:6379> LRANGE list1 0 -1
- 1) "myhash"
- 2) "`list1`"
- 3) "list1"
- 4) "0"
- 5) "bar"
- 6) "foo"
- 7) "foo"
- 127.0.0.1:6379> RPOP list1
- "foo"
- 127.0.0.1:6379> LRANGE list1 0 -1
- 1) "myhash"
- 2) "`list1`"
- 3) "list1"
- 4) "0"
- 5) "bar"
- 6) "foo"
- 127.0.0.1:6379>
- Lindex & Lrange
Redis Lindex 命令用于通过索引获取列表中的元素你也可以使用负数下标, 以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素, 以此类推
- redis 127.0.0.1:6379> LPUSH mylist "World"
- (integer) 1
- redis 127.0.0.1:6379> LPUSH mylist "Hello"
- (integer) 2
- redis 127.0.0.1:6379> LINDEX mylist 0
- "Hello"
- redis 127.0.0.1:6379> LINDEX mylist -1
- "World"
- redis 127.0.0.1:6379> LINDEX mylist 3 # index 不在 mylist 的区间范围内
- (nil)
Redis Lrange 返回列表中指定区间内的元素, 区间以偏移量 START 和 END 指定 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素, 以此类推 你也可以使用负数下标, 以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素, 以此类推
- (integer) 1
- redis> RPUSH mylist "two"
- (integer) 2
- redis> RPUSH mylist "three"
- (integer) 3
- redis> LRANGE mylist 0 0
- 1) "one"
- redis> LRANGE mylist -3 2
- 1) "one"
- 2) "two"
- 3) "three"
- redis> LRANGE mylist -100 100
- 1) "one"
- 2) "two"
- 3) "three"
- redis> LRANGE mylist 5 10
- (empty list or set)
- redis>
- Llen
Redis Llen 命令用于返回列表的长度 如果列表 key 不存在, 则 key 被解释为一个空列表, 返回 0 如果 key 不是列表类型, 返回一个错误
- redis 127.0.0.1:6379> RPUSH list1 "foo"
- (integer) 1
- redis 127.0.0.1:6379> RPUSH list1 "bar"
- (integer) 2
- redis 127.0.0.1:6379> LLEN list1
- (integer) 2
- Linsert & Lset
Redis Linsert 命令用于在列表的元素前或者后插入元素 当指定元素不存在于列表中时, 不执行任何操作 当列表不存在时, 被视为空列表, 不执行任何操作 如果 key 不是列表类型, 返回一个错误如果命令执行成功, 返回插入操作完成之后, 列表的长度 如果没有找到指定元素 , 返回 -1 如果 key 不存在或为空列表, 返回 0
- 127.0.0.1:6379> LRANGE mylist 0 -1
- 1) "Hello"
- 2) "World"
- 127.0.0.1:6379> LINSERT mylist BEFORE "World" "cruel"
- (integer) 3
- 127.0.0.1:6379> LRANGE mylist 0 -1
- 1) "Hello"
- 2) "cruel"
- 3) "World"
- 127.0.0.1:6379> LINSERT mylist AFTER "Hello" "the"
- (integer) 4
- 127.0.0.1:6379> LRANGE mylist 0 -1
- 1) "Hello"
- 2) "the"
- 3) "cruel"
- 4) "World"
- 127.0.0.1:6379>
Redis Lset 通过索引来设置元素的值
当索引参数超出范围, 或对一个空列表进行 LSET 时, 返回一个错误
- 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"
- Lrem & Ltrim
Redis Lrem 根据参数 COUNT 的值, 移除列表中与参数 VALUE 相等的元素
COUNT 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索, 移除与 VALUE 相等的元素, 数量为 COUNT
count < 0 : 从表尾开始向表头搜索, 移除与 VALUE 相等的元素, 数量为 COUNT 的绝对值
count = 0 : 移除表中所有与 VALUE 相等的值
- 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> LREM mylist -2 "hello"
- (integer) 2
Redis Ltrim 对一个列表进行修剪(trim), 就是说, 让列表只保留指定区间内的元素, 不在指定区间之内的元素都将被删除
- 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 "bar"
- (integer) 4
- redis 127.0.0.1:6379> LTRIM mylist 1 -1
- OK
- redis 127.0.0.1:6379> LRANGE mylist 0 -1
- 1) "hello"
- 2) "foo"
- 3) "bar"
来源: http://www.bubuko.com/infodetail-2499522.html