zoukankan      html  css  js  c++  java
  • Redis中LIST列表的相关命令

    Redis中LIST列表的相关命令

    添加

    lpush

    将一个或多个value插入到key的表头,如果存在多个value,那么各个value按从左到右的顺序依次插入表头

    插入表头:意味着新插入的值在最前列
    如果list之前不存在,则会创建一个新的list,如果list已存在,则追加,返回值是list的元素数量,也可以理解位最后插入的元素的相对位置

    127.0.0.1:6379> lpush list2 zhangsan lisi wangwu
    (integer) 3
    127.0.0.1:6379>
    

    rpush

    lpush功能一样,只不过是从从右往左插入(尾部)
    语法:rpush key value1 value2 value3.....

    rpush插入时value的顺序就是元素在list中的顺序

    rpushx

    在指定list的尾部插入元素,如果该list不存在,则操作无效

    127.0.0.1:6379> rpush list4 hello
    (integer) 1
    127.0.0.1:6379> rpushx list5 hello
    (integer) 0
    

    lpushx

    rpushx一样,只不过是从头部插入

    linsert

    语法:linsert key before|alter value1 value2
    list中的value1元素之前或之后位置插入value2,如果value1不存在list key中,那么不执行任何操作

    #在list2中的c元素之前插入一个new元素
    127.0.0.1:6379> linsert list2 before c new
    (integer) 7
    127.0.0.1:6379> lrange list2 0 -1
    1) "a"
    2) "b"
    3) "new"
    4) "c"
    5) "d"
    6) "e"
    7) "f"
    

    修改

    ltrim

    对一个list进行裁剪,即让列表值保留指定期间的元素,其余删除

    127.0.0.1:6379> lrange list2 0 -1
    1) "chenqi"
    2) "zhaoliu"
    3) "wangwu"
    4) "lisi"
    127.0.0.1:6379> ltrim list2 -2 -1
    OK
    127.0.0.1:6379> lrange list2 0 -1
    1) "wangwu"
    2) "lisi"
    127.0.0.1:6379>
    

    lset

    设置指定下标位置元素的值(把原来的值修改了),如果下标不存在则报错

    127.0.0.1:6379> lset list2 2 redis
    OK
    127.0.0.1:6379> lrange list2 0 -1
    1) "a"
    2) "b"
    3) "redis"
    4) "c"
    5) "d"
    6) "e"
    7) "f"
    

    删除

    rpop

    list的尾部弹出一个元素

    127.0.0.1:6379> lrange list2 0 -1
    1) "chenqi"
    2) "zhaoliu"
    3) "wangwu"
    4) "lisi"
    5) "zhangsan"
    127.0.0.1:6379> rpop list2
    "zhangsan"
    127.0.0.1:6379> lrange list2 0 -1
    1) "chenqi"
    2) "zhaoliu"
    3) "wangwu"
    4) "lisi"
    127.0.0.1:6379>
    

    弹出的意思就是移除

    lpop

    list的同步弹出一个元素
    语法:lpop key

    blpop

    lpop一样是弹出语句,不过是阻塞式列表弹出.
    同样依次弹出list中的元素,但是如果list没有可供弹出的元素,那么这个操作(连接)将等待,直到list中有可供弹出的元素或者连接等待超时直接gg

    127.0.0.1:6379> blpop list2 10
    1) "list2"
    2) "wangwu"
    127.0.0.1:6379> blpop list2 10
    1) "list2"
    2) "lisi"
    127.0.0.1:6379> blpop list2 10
    (nil)
    (10.09s) #超时
    

    注意,这个10代表操作超时时间,该命令返回两个结果,第一个是操作的listkey名称.第二个结果是弹出的具体元素

    还有brpop,brpoplpush都是对应命令的阻塞版本

    查询

    lrange

    返回列表key中指定区间之内的元素,区间偏移量startstop指定,下标startstop都是以0开始
    注意,偏移量也可以是负数,-1表示列表的最后一个元素,-2表示列表的倒数第二个元素

    127.0.0.1:6379> lrange list2 2 4
    1) "wangwu"
    2) "lisi"
    3) "zhangsan"
    

    在偏移量位负数的时候,我们应该把list的顺序倒过来看

    tip:lrange key 0 -1就是获取所有元素

    start位负数时,它的起点位置从后面开始数,所以说,start确定了值的时候,lrange可以输出的最大范围已经决定了,不管stop的值是什么,输出的元素范围绝对是start开始往后的元素最大范围.
    所以Redis中的range相关命令其实最重要要看start参数的值,stop只是决定了尾部在哪里

    lrange中,stop的值绝对不能在start的前面

    lindex

    返回list中指定下标的元素,0是开始下标,如果下标位负数,那么顺序从后往前,-1是开始位置也是列表中的最后元素

    127.0.0.1:6379> lindex list2 -3
    "zhaoliu"
    127.0.0.1:6379> lindex list2 1
    "zhaoliu"
    

    考虑到下标可以负数,所以每个元素是有俩个下标代表位置

    llen

    返回列表的长度
    语法:llen key

    如果key不存在,则key被解释位一个空列表,返回0
    那么,如果返回值是0,不一定是list内部元素为空,还有可能key不存在

    特殊操作

    rpoplpush

    语法:rpoplpush key1 key2
    key1中的尾部弹出一个元素并插入到key2的头部

    127.0.0.1:6379> rpush list2 a b c d e f g
    (integer) 7
    127.0.0.1:6379> rpoplpush list2 list3
    "g"
    127.0.0.1:6379> lrange list2 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
    127.0.0.1:6379> lrange list3 0 -1
    1) "g"
    127.0.0.1:6379>
    
  • 相关阅读:
    Android AIDL使用详解
    学习Spring-Data-Jpa(十七)---对Web模块的支持
    学习Spring-Data-Jpa(十六)---@Version与@Lock
    学习Spring-Data-Jpa(十五)---Auditing与@MappedSuperclass
    学习Spring-Data-Jpa(十四)---自定义Repository
    学习Spring-Data-Jpa(十三)---动态查询接口JpaSpecificationExecutor
    学习Spring-Data-Jpa(十二)---投影Projections-对查询结果的扩展
    学习Spring-Data-Jpa(十一)---抓取策略与实体图
    学习Spring-Data-Jpa(十)---注解式方法查询之@Query、@Modifying与派生delete
    学习Spring-Data-Jpa(九)---注解式方法查询之@NamedQuery、@NamedNativeQuery
  • 原文地址:https://www.cnblogs.com/liangshu/p/12408407.html
Copyright © 2011-2022 走看看