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

  • 相关阅读:
    牛客小白月赛2 D 虚虚实实 【欧拉图】【连通图】
    牛客小白月赛2 A 数字方阵【随机】【找规律】
    牛客小白月赛1 J おみやげをまらいました 【MAP】
    牛客小白月赛1 I あなたの蛙が帰っています 【卡特兰数】
    欧拉函数
    乘法逆元
    扩展欧几里得
    快速乘法
    JPEG图像压缩出现资源不足问题的解决
    如何避免关键程序被意外关闭?
  • 原文地址:https://www.cnblogs.com/maplethefox/p/11309449.html
Copyright © 2011-2022 走看看