zoukankan      html  css  js  c++  java
  • 数据类型:列表类型(list)

    列表数据类型(List)

    特点

    1、元素是字符串类型
    2、列表头尾增删快,中间增删慢,增删元素是常态
    3、元素可重复
    4、最多可包含2^32 -1个元素
    5、索引同python列表

    头尾压入元素(LPUSH | RPUSH)

    1、LPUSH key value #(left头部压入)

    2、RPUSH key value #(right尾部压入)

    127.0.0.1:6379> LPUSH mylist1 0 1 2 3 4
    (integer) 5
    127.0.0.1:6379> LRANGE mylist1 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    5) "0"
    127.0.0.1:6379> RPUSH mylist2 0 1 2 3 4
    (integer) 5
    127.0.0.1:6379> LRANGE mylist2 0 -1
    1) "0"
    2) "1"
    3) "2"
    4) "3"
    5) "4"
    

     三查看|设置 列表元素

    #1.查看(LRANGE)
        LRANGE key start stop
    # 查看列表中所有元素
    LRANGE key 0 -1
    #2.获取指定位置元素(LINDEX)
        LINDEX key index
    #3.设置指定位置元素的值(LSET)
        LSET key index value
    #4.获取列表长度(LLEN)
        LLEN key

     四头尾弹出元素(LPOP | RPOP)

    1.LPOP key : 从列表头部弹出一个元素

    2.RPOP key : 从列表尾部弹出一个元素

    3.RPOPLPUSH source destination : 从一个列表尾部弹出元素压入到另一个列表头部

    4.rpoplpush 尾部弹出 头部压入

    127.0.0.1:6379> LRANGE mylist1 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    5) "8"
    127.0.0.1:6379> LPOP mylist1
    "4"
    127.0.0.1:6379> RPOP mylist1
    "8"
    127.0.0.1:6379> LRANGE mylist1 0 -1
    1) "3"
    2) "2"
    3) "1"
    127.0.0.1:6379> RPOPLPUSH mylist1 mylist2
    "1"
    127.0.0.1:6379> LRANGE mylist1 0 -1
    1) "3"
    2) "2"
    127.0.0.1:6379> LRANGE mylist2 0 -1
    1) "1"
    2) "0"
    3) "1"
    4) "2"

     移除指定元素(LREM)

    LREM key count value

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

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

      count=0:移除表中所有与value相等的值

    127.0.0.1:6379> LRANGE mylist1 0 -1
    1) "3"
    2) "2"
    127.0.0.1:6379> LPUSH mylist1 3 2
    (integer) 4
    127.0.0.1:6379> LRANGE mylist1 0 -1
    1) "2"
    2) "3"
    3) "3"
    4) "2"
    127.0.0.1:6379> LREM mylist1 1 2
    (integer) 1
    127.0.0.1:6379> LRANGE mylist1 0 -1
    1) "3"
    2) "3"
    3) "2"
    127.0.0.1:6379> LREM mylist1 1 3
    (integer) 1
    127.0.0.1:6379> LRANGE mylist1 0 -1
    1) "3"
    2) "2"

     去除指定范围外元素(LTRIM)

    LTRIM key start stop

    127.0.0.1:6379> LRANGE mylist2 0 -1
    1) "1"
    2) "0"
    3) "1"
    4) "2"
    5) "3"
    6) "4"
    127.0.0.1:6379> LTRIM mylist2 0 -2
    OK
    127.0.0.1:6379> LRANGE mylist2 0 -1
    1) "1"
    2) "0"
    3) "1"
    4) "2"
    5) "3"

      例如:保存微博评论最后500条

        LTRIM user001:comments 0 499

    列表中插入值(LINSERT)

    LINSERT key BEFORE|AFTER pivot value

    key和pivot不存在,不进行任何操作

    127.0.0.1:6379> LRANGE mylist2 0 -1
    1) "0"
    2) "1"
    3) "2"
    4) "3"
    5) "4"
    127.0.0.1:6379> LINSERT mylist2 after 2 666
    (integer) 6
    127.0.0.1:6379> LINSERT mylist2 before 4 888
    (integer) 7
    127.0.0.1:6379> LRANGE mylist2 0 -1
    1) "0"
    2) "1"
    3) "2"
    4) "666"
    5) "3"
    6) "888"
    7) "4"

     八阻塞弹出(BLPOP | BRPOP)

    BLPOP key timeout #没有元素的时候就阻塞了

    BRPOP key timeout

    1、如果弹出的列表不存在或者为空,就会阻塞

    2、超时时间设置为0,就是永久阻塞,直到有数据可以弹出

    3、如果多个客户端阻塞再同一个列表上,使用First In First Service原则,先到先服务

    127.0.0.1:6379> BLPOP mylist2 0
    1) "mylist2"
    2) "3"
    127.0.0.1:6379> BLPOP mylist2 0
    1) "mylist2"
    2) "2"
    127.0.0.1:6379> BLPOP mylist2 0
    1) "mylist2"
    2) "1"
    127.0.0.1:6379> BLPOP mylist2 0
    # 阻塞了

     列表常用命令总结

    #
    1、LPUSH key value1 value2 
    2、RPUSH key value1 value2
    3、RPOPLPUSH source destination 
    4、LINSERT key after|before value newvalue
    #
    5、LRANGE key start stop
    6、LLEN key
    #
    7、LPOP key
    8、RPOP key
    9、BLPOP key timeout
    10、BRPOP key timeout
    11、LREM key count value#(根据什么删除)
    12、LTRIM key start stop#(保留范围内元素)
    #
    13、LSET key index newvalue

     Python操作列表

    import redis
    
    r = redis.Redis(host='192.168.43.49',port=6379,db=0)
    # ['mysql','redis']
    r.lpush('pylist','redis','mysql')
    # ['mysql','redis','django','spider']
    r.rpush('pylist','django','spider')
    # ['mysql','redis','django','spider','AI']
    r.linsert('pylist','after','spider','AI')
    # 5
    print(r.llen('pylist'))
    # ['redis','django','spider']
    r.lpop('pylist')
    r.rpop('pylist')
    # ['redis','django','spider']
    print(r.lrange('pylist',0,-1))
    # ['redis','spider']
    r.lrem('pylist',0,'django')
    # 返回True,['redis']
    r.ltrim('pylist',0,0)
    # 返回True,['spiderman']
    r.lset('pylist',0,'spiderman')
    
    r.delete('pylist')

    练习:

    1、查看所有的键

      keys *

    2、向列表 spider::urls 中以RPUSH放入如下几个元素:01_baidu.com、02_taobao.com、03_sina.com、04_jd.com、05_xxx.com

      RPUSH spider::urls 01_baidu.com 02_taobao.com 03_sina.com 04_jd.com 05_xxx.com

    3、查看列表中所有元素

      LRANGE spider::urls 0 -1

    4、查看列表长度

      LLEN spider::urls

    5、将列表中01_baidu.com 改为 01_tmall.com

      LSET spider::urls 0 01_tmall.com

    6、在列表中04_jd.com之后再加1个元素 02_taobao.com

      LINSERT spider::urls after 04_jd.com 02_taobao.com

    7、弹出列表中的最后一个元素

      RPOP spider::urls

    8、删除列表中所有的 02_taobao.com

      LREM spider::urls 0 02_taobao.com

    9、剔除列表中的其他元素,只剩前3条

      LTRIM spider::urls 0 2

  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/maplethefox/p/11309449.html
Copyright © 2011-2022 走看看