zoukankan      html  css  js  c++  java
  • Redis常用命令--Lists

    List是一个双向链表,按照插入顺序排序,可以添加一个元素到头部或者尾部。当对一个空key执行插入操作的时候会创建一个新表。

    如果要清空列表,则会杀出对应的key空间。

    在List中保存了头节点和未节点,以及链表包含的节点数量。所以查询链表中节点数量的复杂度为O(1)。

    在List中保存的每个节点都保存了前一个节点,后一个节点,以及节点本身。

    头结点的前一个节点为NULL,尾节点的后一个节点为NULL。

    在Redis中提供了大概17个操作list的命令。

    LPUSH key value[value ....]:从队列的左边入队一个或多个元素,时间复杂度O(1)。

    RPUSH key value[value...]:从队列的右边入队一个或多个元素,时间复杂度O(1)。

    LPOP key:从队列的左边出队一个元素,时间复杂度O(1)。

    RPOP key:从队列的右边出队一个元素,时间复杂度O(1)。

    LPUSHX key value:当队列存在时,从队列左边入队一个元素,时间复杂度O(1)。

    RPUSHX key value:当队列存在时,从队列右边入队一个元素,时间复杂度O(1)。

    LSET key index value:设置队列里面一个元素的值

    LINDEX key index:返回下标为index的元素

    LLEN key:获取队列的长度

    LTRIM key start stop:剪裁列表到指定范围内的清单

    LINSERT key BEFORE|AFTER pivot value:在列表中的另一个元素之前或之后插入一个元素

    LREM key count value:从列表中删除元素,时间复杂度为O(N)。

      count>0:从表头开始向表尾搜索,移除与value相等的元素,数量为count

      count<0:从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值

      count=0:移除表中所有与value相等的元素。

    127.0.0.1:6379> lpush names a b c
    (integer) 3
    127.0.0.1:6379> rpush names d e
    (integer) 5
    127.0.0.1:6379> type names
    list
    127.0.0.1:6379> lpop names
    "c"
    127.0.0.1:6379> rpop names
    "e"
    127.0.0.1:6379> lpushx names f
    (integer) 4
    127.0.0.1:6379> rpushx names g
    (integer) 5
    127.0.0.1:6379> lpushx names2 h
    (integer) 0
    127.0.0.1:6379> rpushx names2 i
    (integer) 0
    127.0.0.1:6379> llen names
    (integer) 5
    127.0.0.1:6379> lset names 2 o
    OK
    127.0.0.1:6379> lindex names 2
    "o"
    127.0.0.1:6379> len names
    (error) ERR unknown command 'len'
    127.0.0.1:6379> llen names
    (integer) 5
    127.0.0.1:6379> linsert names before h hh
    (integer) -1
    127.0.0.1:6379> linsert names before g gg
    (integer) 6
    127.0.0.1:6379> ltrim names 2 4
    OK
    127.0.0.1:6379> llen names
    (integer) 3
    127.0.0.1:6379> lpop names
    "o"
    127.0.0.1:6379> lrem names 1 o
    (integer) 0
    127.0.0.1:6379> lpop names
    "d"
    127.0.0.1:6379>

    BLPOP key [key ...] timeout:弹出该列表中的第一个元素,或阻塞,直到有一个可用

    BRPOP key [key ...] timeout:弹出该列表中的最后一个元素,或阻塞,直到有一个可用

    127.0.0.1:6379> lpush names zhangsan lisi wangwu
    (integer) 3
    127.0.0.1:6379> BLPOP names zhangsan 1
    1) "names"
    2) "wangwu"
    127.0.0.1:6379> BRPOP names
    (error) ERR wrong number of arguments for 'brpop' command
    127.0.0.1:6379> BRPOP names 1
    1) "names"
    2) "zhangsan"
    127.0.0.1:6379> BRPOP names 5
    1) "names"
    2) "lisi"
    127.0.0.1:6379> BRPOP names 5
    (nil)
    (5.09s)
    #没有数据进来的时候,就超时了
    127.0.0.1:6379>
    
    127.0.0.1:6379> BRPOP names 50
    #这时候处于等待状态
    #我们再开启一个客户端
    [root@localhost 18:39 ~]# redis-cli
    127.0.0.1:6379> lpush names fuwh
    (integer) 1
    127.0.0.1:6379>
    #这时候,这边就或在阻塞的时候,获取到
    1) "names"
    2) "fuwh"
    (20.97s)
    127.0.0.1:6379>

    RPOPLPUSH source destination:删除列表中的最后一个元素,将其追加到另一个列表

    BRPOPLPUSH source destination timeout:弹出一个列表的值,将它推到另外一个列表,并返回它或阻塞,直到有一个可用

    127.0.0.1:6379> lpush ages 18 19 20
    (integer) 3
    127.0.0.1:6379> lpush names zhangsan lisi wangwu
    (integer) 3
    127.0.0.1:6379> llen names
    (integer) 3
    127.0.0.1:6379> llen ages
    (integer) 3
    127.0.0.1:6379> RPOPLPUSH names ages
    "zhangsan"
    127.0.0.1:6379> lpop ages
    "zhangsan"
    127.0.0.1:6379> RPOPLPUSH names ages
    "lisi"
    127.0.0.1:6379> lpop ages
    "lisi"
    127.0.0.1:6379> RPOPLPUSH names ages
    "wangwu"
    127.0.0.1:6379> lpop ages
    "wangwu"
    127.0.0.1:6379> llen ages
    (integer) 3
    127.0.0.1:6379> BRPOPLPUSH names ages 100
    #此时names中没有数据,处于阻塞状态
    #另外启动一个客户端,给names里面push数据
    127.0.0.1:6379> lpush names zhangsan
    (integer) 1
    127.0.0.1:6379>
    #----------------------------
    "zhangsan"
    (11.47s)
    127.0.0.1:6379> llen ages
    (integer) 4
    127.0.0.1:6379> lpop ages
    "zhangsan"
    127.0.0.1:6379>
  • 相关阅读:
    google code jam exercise——Your Rank Is Pure
    C/C++中的文件操作(2)
    google code jam exercise——File Fix It
    google code jam exercise——All Your Base
    C/C++中的文件操作(1)
    google code jam exercise——Center of Mass
    C/C++字符串操作split
    JavascriptDOM
    Javascript特权方法
    Report子报表
  • 原文地址:https://www.cnblogs.com/zerotomax/p/7486976.html
Copyright © 2011-2022 走看看