美文网首页
Redis5数据类型2-List

Redis5数据类型2-List

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2022-03-16 11:37 被阅读0次

    1. List简介

    Redis中List是基于Linked List实现,双向无环链表,其中元素是字符串类型。特点:

    • 列表头尾增删快,中间增删慢,增删元素是常态
    • 元素可以重复出现
    • 最多包含232-1元素
      双向链表添加删除元素示意图:
      增.png
      删.png
      同时List还具有索引,索引顺序:
    • 从左至右,从0开始
    • 从右至左,从-1开始


      索引.png

    2. List指令

    2.1 增加元素

    • 从左边增加
      lpush key value [value ...]
    127.0.0.1:6379> lpush fruits apple
    1
    127.0.0.1:6379> lpush fruits pear banana
    3
    127.0.0.1:6379>
    
    • 从右边添加
      rpush key value [value ...]
    127.0.0.1:6379> rpush fruits orange
    4
    127.0.0.1:6379>
    

    2.2 查看元素

    lrange key start stop
    命令返回start、stop索引之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:-1代表最后边的一个元素。

    127.0.0.1:6379> lrange fruits 0 -1
    banana
    pear
    apple
    orange 
    127.0.0.1:6379>
    

    2.3 获取列表中元素的个数

    llen key

    127.0.0.1:6379> llen fruits
    4
    127.0.0.1:6379>
    

    2.4 取出元素

    • 从左边取出元素,并返回
      lpop key
    • 从右边取出元素,并返回
      rpop key
    127.0.0.1:6379> lpop fruits
    banana
    127.0.0.1:6379> rpop fruits
    orange
    127.0.0.1:6379>
    

    2.5 元素从一个列表转移到另一个列表中

    rpoplpush source dest

    127.0.0.1:6379> lpush fruits banana
    3
    127.0.0.1:6379> rpush fruits orange
    4
    127.0.0.1:6379> lrange fruits 0 -1
    banana
    pear
    apple
    orange
    127.0.0.1:6379> rpoplpush fruits list1
    orange
    127.0.0.1:6379> lrange list1 0 -1
    orange
    127.0.0.1:6379> lrange fruits 0 -1
    banana
    pear
    apple
    127.0.0.1:6379>
    

    2.6 获取、设定指定位置的元素

    • 获取
      lindex key index
    • 设定
      lset key index value
    127.0.0.1:6379> lrange fruits 0 -1
    banana
    pear
    apple
    banana
    127.0.0.1:6379> lindex fruits 1
    pear
    127.0.0.1:6379> lset fruits 2 apples
    OK
    127.0.0.1:6379> lrange fruits 0 -1
    banana
    pear
    apples
    banana
    127.0.0.1:6379>
    

    2.7 删除List中指定元素

    lrem key count value
    从列表头部开始删除值等于value的元素count次

    • count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
    • count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
    • count = 0 : 移除表中所有与 value 相等的值
    127.0.0.1:6379> lpush list2 a b c c b a a b c c b a a a a
    15
    127.0.0.1:6379> lrem list2 1 a
    1
    127.0.0.1:6379> lrange list2 0 -1
    a
    a
    a
    b
    c
    c
    b
    a
    a
    b
    c
    c
    b
    a
    127.0.0.1:6379> lrem list2 3 a
    3
    127.0.0.1:6379> lrange list2 0 -1
    b
    c
    c
    b
    a
    a
    b
    c
    c
    b
    a
    127.0.0.1:6379> lrem list2 0 a
    3
    127.0.0.1:6379> lrange list2 0 -1
    b
    c
    c
    b
    b
    c
    c
    b
    127.0.0.1:6379>
    

    2.8 去除指定范围外的元素

    ltrim key start stop

    127.0.0.1:6379> lpush list3 0 1 2 3 4 5 6 7 8 9
    10
    127.0.0.1:6379> lrange list3 0 -1
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0
    127.0.0.1:6379> ltrim list3 0 4
    OK
    127.0.0.1:6379> lrange list3 0 -1
    9
    8
    7
    6
    5
    127.0.0.1:6379>
    

    2.9 向列表中插入元素

    linsert key before|after pivot value
    在列表中从左到右查找值为pivot的元素,然后根据BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。

    127.0.0.1:6379> lpush list4 1 2 4 5
    4
    127.0.0.1:6379> lrange list4 0 -1
    5
    4
    2
    1
    127.0.0.1:6379> linsert list4 before 2 3
    5
    127.0.0.1:6379> lrange list4 0 -1
    5
    4
    3
    2
    1
    127.0.0.1:6379>
    

    2.10 阻塞

    blpop key [key ...] timeout
    brpop key [key ...] timeout
    阻塞情况:

    • 如果弹出的列表不存在或者为空,就会阻塞
    • 超时时间设置为0,就是永久阻塞,直到有数据可以弹出
    • 如果多个客户端阻塞在同一个列表上,使用First In First Service原则,先到先服务,即只有1个客户端会接收成功

    相关文章

      网友评论

          本文标题:Redis5数据类型2-List

          本文链接:https://www.haomeiwen.com/subject/sutpdrtx.html