redis list


10033

list

redis list 是字符串列表,按照插入顺序排序.可以添加一个元素到列表的头部和尾部.

一个列表最多可以包含$2^{32}-1$ 个元素.

1.常用命令

命令描述
blpop key1 [key2] timeout移出并获取列表的第一个元素,如果列表
没有元素会阻塞列表直到等待超时或发现可弹出元素为止
brpop key1 [key2] timeout移出并获取列表的最后一个元素,如果列表
没有元素会阻塞列表直到等待超时或发现可弹出元素为止
brpoplpush source destination timeout从列表中弹出一个值,将弹出的元素插入到
另外一个列表中并返回它; 如果列表没有元素会
阻塞列表直到等待超时或发现可弹出元素为止。
lindex key index通过索引获取列表中的元素
`linsert key beforeafter pivot value`
llen key获取列表长度
lpop key移出并获取列表的第一个元素
lpush key value1 [value2]将一个或多个值插入到列表头部
lpushx key value将一个值插入到已存在的列表头部
lrange key start stop获取列表指定范围类的元素
lrem key count value移出列表元素.
lset key index value通过索引设置列表元素的值
ltrim key start stop对一个列表进行修剪(trim),就是说,让列表
只保留指定区间内的元素,不在指定区间之内的元素都将被删除
rpop key移除并获取列表的最后一个元素
rpoplpush source destination移除列表的最后一个元素,并将该元素添加到另一个列表并返回
rpush key value1 [value2]在列表末尾添加一个或多个值
rpushx key value对已存在的列表末尾添加值.

1.添加

添加列表元素

左添加

  • lpush

  • lpushx

右添加

  • rpush

  • prushx

# 左添加,
# 添加单个元素
127.0.0.1:6379> lpush languages python
(integer) 1
# 添加重复元素
127.0.0.1:6379> lpush languages python
(integer) 2
# 测量长度
127.0.0.1:6379> llen languages
(integer) 2
# 按照索引输出
127.0.0.1:6379> lindex languages 0
"python"
127.0.0.1:6379> lindex languages 1
"python"
# 按照范围输出
127.0.0.1:6379> lrange languages 0 -1
1) "python"
2) "python"

# 添加多个值
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"

# 右添加
127.0.0.1:6379> lrange languages 0 -1
1) "python"
2) "python"
127.0.0.1:6379> rpush languages radis
(integer) 3
127.0.0.1:6379> lrange languages 0 -1
1) "python"
2) "python"
3) "radis"
127.0.0.1:6379> 

2.删除

删除列表元素

左删除

  • lpop

  • blpop

右删除

  • rpop

  • brpop

  • rpoplpush

  • brpoplpush

综合

  • lrem key count value :
    • count>0:从头部开始搜索,移除与value 相等的元素,数量为count
    • count<0:从尾部开始搜索,移除与value 相等的元素,数量为count 的绝对值.
    • count=0:移除表中所有与value相等的元素
# 查看列表所有元素
127.0.0.1:6379> lrange languages 0 -1
1) "python"
2) "python"
3) "radis"
# 从头部移除第一个元素
127.0.0.1:6379> lpop languages
"python"
127.0.0.1:6379> lrange languages 0 -1
1) "python"
2) "radis"
# 阻塞式移除头部的第一个元素,timeout=3(秒)
127.0.0.1:6379> blpop languages 3
1) "languages"
2) "python"
# 查看最后的元素.
127.0.0.1:6379> llen languages 
(integer) 1
127.0.0.1:6379> lrange languages 0 -1
1) "radis"


# lrem 
# 新生成一个列表
127.0.0.1:6379> lpush vip 'Jack' 'Bob' 'Parry' 'Jack' 'Bob' 'Hary'
(integer) 6
127.0.0.1:6379> llen vip
(integer) 6
127.0.0.1:6379> lrange vip 0 -1
1) "Hary"
2) "Bob"
3) "Jack"
4) "Parry"
5) "Bob"
6) "Jack"

# 从头部开始移除 1 个 Jack
127.0.0.1:6379> lrem vip 1 Jack
(integer) 1
127.0.0.1:6379> lrange vip 0 -1
1) "Hary"
2) "Bob"
3) "Parry"
4) "Bob"
5) "Jack"

# 从尾部开始移除 1 个Jack
127.0.0.1:6379> lrem vip -1 Jack
(integer) 1
127.0.0.1:6379> lrange vip 0 -1
1) "Hary"
2) "Bob"
3) "Parry"
4) "Bob"

# 移除所有的 Bob
127.0.0.1:6379> lrem vip 0 Bob
(integer) 2
127.0.0.1:6379> lrange vip 0 -1 
1) "Hary"
2) "Parry"

3. 插入

linsert key before/after pivot value:将value 插入到列表key 中,位于值pivot 之前或之后.

127.0.0.1:6379> del mylist
(integer) 1
127.0.0.1:6379> rpush mylist 'hello'
(integer) 1
127.0.0.1:6379> rpush mylist 'world'
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> linsert mylist before 'world' 'there'
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "there"

4.索引

长度:llen

索引获取值:lindex

替换索引值:lset key index value

索引获取子值(生成新列表):ltrim

索引获取子值(不改变原列表):lrange

# mylist 列表
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "there"
3) "world"

# 通过索引获取值
127.0.0.1:6379> lindex mylist 0
"hello"
127.0.0.1:6379> lindex mylist 1
"there"
127.0.0.1:6379> lindex mylist 2
"world"

# 通过索引替换值
127.0.0.1:6379> lset mylist 1 replace
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "replace"
3) "world"

# 通过索引生成新的子列表.
127.0.0.1:6379> ltrim mylist 0 1
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "replace"

文章作者: 文彦
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 文彦 !
评论
  目录