美文网首页
Redis学习笔记-05List列表

Redis学习笔记-05List列表

作者: 惊天动地猪儿虫 | 来源:发表于2020-12-27 12:45 被阅读0次

    List列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素或者获得列表的某一个片段。
    其内部使用的是双向链表来实现的,向两端添加元素的时间复杂度为O(1)。

    使用Java的代码实现的伪代码为:

            Deque<String> articles = new LinkedList<String>();
            articles.addLast("article2");
            articles.addLast("article3");
            articles.addFirst("article1");
    

    使用Redis的实现为:

    127.0.0.1:6379> rpush articles article2
    (integer) 1
    127.0.0.1:6379> rpush articles article3
    (integer) 2
    127.0.0.1:6379> lpush articles article1
    (integer) 3
    127.0.0.1:6379> lrange articles 0 2
    1) "article1"
    2) "article2"
    3) "article3"
    127.0.0.1:6379> 
    

    1 命令操作

    API方法名 作用
    lpush 在key对应list的头部添加字符串元素
    rpush 在key对应list的尾部添加字符串元素
    linsert 在key对应list特定位置前或后添加字符串
    lset 设置list中指定下标的元素值
    lrem 从key对应list中删除n个和value相同的元素(n<0 从尾删除,n=0 全部删除)
    ltrim 保留指定key的值范围内的数据
    lpop 从list头部删除元素,并返回删除元素
    rpop 从list尾部删除元素,并返回删除元素
    rpoplpush 从第一个list的尾部移除元素并添加到底二个list的头部
    lindex 返回名称为key的list中index位置的元素
    llen 返回key对应list的长度

    1.1 lpush和rpush

    lpush key value [value...]
    rpush key value [value...]
    向列表两端增加元素

    127.0.0.1:6379> rpush articles article2
    (integer) 1
    127.0.0.1:6379> rpush articles article3
    (integer) 2
    127.0.0.1:6379> lpush articles article1
    (integer) 3
    127.0.0.1:6379> lrange articles 0 2
    1) "article1"
    2) "article2"
    3) "article3"
    127.0.0.1:6379>
    

    1.2 lpop和rpop

    lpop key
    rpop key
    从列表两端弹出元素

    127.0.0.1:6379> lpop articles
    "article1"
    127.0.0.1:6379> rpop articles
    "article3"
    127.0.0.1:6379> lrange articles 0 2
    1) "article2"
    127.0.0.1:6379> 
    

    1.3 llen

    llen key
    获取列表中元素的个数

    127.0.0.1:6379> llen articles
    (integer) 1
    127.0.0.1:6379> 
    

    1.4 lrange

    lrange key start stop
    获取列表片段

    127.0.0.1:6379> lrange articles 0 2
    1) "article1"
    2) "article2"
    3) "article3"
    127.0.0.1:6379> 
    

    lrange命令也支持负索引,表示从右边开始计算序数

    127.0.0.1:6379> lrange articles -2 -1
    1) "article2"
    2) "article3"
    127.0.0.1:6379> lrange articles -3 -1
    1) "article1"
    2) "article2"
    3) "article3"
    127.0.0.1:6379> 
    

    1.5 lrem

    lrem key count value
    删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值得不同,lrem执行会有部分不同。

    • 当count > 0时,会从列表左边开始删除前count个值为value的元素。
    • 当count < 0时,会从列表右边开始删除前count个值为value的元素。
    • 当count = 0时,会从列表删除所有值为value的元素。
    127.0.0.1:6379> lrange articles 0 2
    1) "article1"
    2) "article2"
    3) "article3"
    127.0.0.1:6379> lrem articles  1 article2
    (integer) 1
    127.0.0.1:6379> lrange articles 0 2
    1) "article1"
    2) "article3"
    127.0.0.1:6379> 
    

    1.6 lindex和lset

    lindex key index
    lset key index value
    获得/设置指定索引的元素值

    127.0.0.1:6379> lrange articles 0 2
    1) "article1"
    2) "article3"
    127.0.0.1:6379> lindex articles 1
    "article3"
    127.0.0.1:6379> lset articles 2 article4
    (error) ERR index out of range
    127.0.0.1:6379> lset articles 1 article4
    OK
    127.0.0.1:6379> lrange articles 0 2
    1) "article1"
    2) "article4"
    127.0.0.1:6379> 
    

    1.7 ltrim

    ltrim key start end
    只保留列表指定片段,即删除指定索引范围之外的所有元素。与lrange不同的是,lrange不删除元素。

    127.0.0.1:6379> lrange articles 0 2
    1) "article1"
    2) "article4"
    127.0.0.1:6379> ltrim articles 1 1
    OK
    127.0.0.1:6379> lrange articles 0 2
    1) "article4"
    127.0.0.1:6379> 
    

    1.8 linsert

    linsert key before|after pivot value
    首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before还是after来决定value插入该元素的前面还是后面。

    127.0.0.1:6379> lrange articles 0 2
    1) "article4"
    127.0.0.1:6379> 
    127.0.0.1:6379> linsert articles before article4 article3
    (integer) 2
    127.0.0.1:6379> lrange articles 0 2
    1) "article3"
    2) "article4"
    127.0.0.1:6379> 
    

    1.9 rpop

    rpoplpush source destination
    将元素从一个列表转到另一个列表。先执行rpop命令在执行lpush命令。rpoplpush会先从source列表类型建的右端弹出一个元素,然后将其加入到destination列表类型键的左边,并返回这个元素的值,整个过程都是原子性的。

    127.0.0.1:6379> rpoplpush articles articles1
    "article4"
    127.0.0.1:6379> lrange articles 0 2
    1) "article3"
    127.0.0.1:6379> lrange articles1 0 2
    1) "article4"
    127.0.0.1:6379> 
    

    相关文章

      网友评论

          本文标题:Redis学习笔记-05List列表

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