zoukankan      html  css  js  c++  java
  • Redis的列表(List)类型

            列表类型(List)可以存储一个有序的字符串列表,常用的操作就是向列表两端添加元素,或者获取列表中某一个片段。

            列表类型内部使用双向链表(double linked list)实现的,所以向列表两端添加或删除元素的速度非常快,越是接近两端的元素就越快,但是,也有弊端,就是通过索引访问元素的速度比较慢。

            因为使用了双向链表实现存储的,所以在命令上也有两种:L和R。“L”代表左,“R”代表右。

    一、常用命令

    1、向列表两端添加元素

    LPUSH key value1 [value2 ... ]
    RPUSH key value1 [value2 ... ]

    第一行命令向key为numbers的列表添加一个“1”,然后再添加了两个元素,如下图所示:

     

    由于使用lpush,即向左添加元素到队列,所以第二条命令一次性添加两个元素,会先将2在列表的左边添加进去,接着把3从左边添加进去,所以会看到上图的效果,lrange命令也进行了验证。(lrang命令是用于获得列表片段)

    接着从右边添加元素:

    lpush命令和rpush命令的用法是一样的,前者从左添加,后者从右添加。

    2、弹出元素

    lpop key
    rpop key

    redis的列表类型有点像栈,上面第一条命令表示从左边弹出一位元素,即“3”,第二条命令表示从右弹出一位元素,即“-1”,再次查看numbers列表的元素,参数依然是0和4(0和4表示索引),但返回只有2,1,0.说明pop这个命令会直接将列表的元素从列表中“删除”。

    3、获取列表片段

    lrange key start stop

    start和stop表示索引,列表的起始索引值为0,lrange命令也支持负索引,如:

    上图的-3表示从右边开始第三位元素,-1表示从右边开始的第一位,如此类推。

    4、删除列表中指定的值

    lrem key count value

    count:

    • 当count > 0时,lrem命令会从左边开始删除前count个值为value的元素;
    • 当count < 0 时,lrem命令会从右边开始删除前 |count| 个值为value的元素;
    • 当count = 0时,lrem命令会删除所有值为value的元素。

    上图时从右边删除前两个值为2元素。

    二、实际应用场景

    1、存储文章ID列表

            当每次发布新文章时,就可以使用lpush命令将文章ID加入到列表中,这样显示文章列表时,就会根据加入文章加入列表的顺序进行倒序显示,即最新发布的文章排在最前面。

            用列表存储文章ID时,要注意两个问题:

    文章发布时间不易修改;
    当文章数量较多时,访问中间文章的速度比较慢,前面也介绍过,列表类型存储是使用双向链表实现的。
    2、存储评论列表

            将最新的评论放在列表的左边。

  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/SysoCjs/p/10327149.html
Copyright © 2011-2022 走看看