• Redis List类型


    Redis List类型

    Redis的List类型有两种编码:zipList和linkedList

    zipList中所有的节点都是连续的在内存中排列的,加载速度快,zipList结构设计也是为了节约内存空间,但是不适合存储大量的节点

    linkedList是链表结构,逻辑连续,在内存中可能是分散到各个内存空间碎片中的,因为不要求内存一定要连续,所以适合存储大量的节点

    编码转换条件

    1. 列表中所有节点的长度都小于64字节
    2. 列表对象保存的节点数量小于512个

    命令详解

    • LPUSH:在头部添加1个或多个节点,当key不存在时,创建一个List并将节点添加进去,否则直接在原有key的List上添加。LPUSH <key> <elem> [elem ..]

      LPUSH a 1 2 3
      
    • LRANGE:查看指定范围的节点,0:开始位置,-1:结束位置,LRANGE <key> <startIndex> <stopIndex>

      LRANGE a 0 -1	// 3 2 1
      

      发现取出来的顺序和存放的顺序是反的,因为LPUSH每次添加的节点都会在List的头部添加,后加的节点反而在最前面

    • LLEN:求List的长度,LLEN <key>

      LPUSH a 1 2 3
      LLEN a	// 3
      
    • LPUSHX:只有key存在的时候才能往里面放节点,LPUSHX <key> <elem> [elem ..]

      LPUSHX b 1 2 3	// 返回0
      LRANGE b 0 -1	// (empty array)
      
    • LPOP:返回左边(首部)第一个节点,LPOP <key>

      LPUSH a 1 2 3
      LPOP a	// 3
      
    • RPOP:返回右边(尾部)第一个节点,语法和LPOP一样,RPOP <key>

    • BLPOP:阻塞式弹出头部节点,必须带有超时时间(timeout),单位为秒,如果List中有节点就立即返回,如果没有就阻塞timeout秒,直到有数据插入就立即返回。如果指定多个key,只要有一个key指向的List里面有数据就立即返回,BLPOP <key> [key ..] <timeout>

      BLPOP a 1	// 如果没有数据,阻塞1秒,否则立即返回    
      ------------
      LPUSH a 1	// 可以开启另一个终端,向a里面放数据,这时候被BLPOP阻塞的终端检测到a有数据进来了,就立即返回
      
    • BRPOP:阻塞时在尾部弹出一个节点,用法和BLPOP一样,BRPOP <key> [key ..] timeout

    • BRPOPLPUSH:阻塞时在尾部弹出一个节点,并加入到另一个List的头部,相当于BRPOP+RPOPLPUSH的结合体,BRPOPLPUSH <source> <destination> <timeout>

    • RPUSH:在右边(尾部)插入一个或多个节点,和LPUSH语法一样,RPUSH <key> <elem> [elem ..]

    • RPUSHX:在右边(尾部)插入一个或多个节点,和LPUSHX语法一样,RPUSHX <key> <elem> [elem ..]

    • RPOPLPUSH:在List尾部弹出一个节点并加到另一个List的头部,如果另一个List不存在则创建,RPOPLPUSH <source> <destination>

      LPUSH a 1 2
      RPOPLPUSH a b
      LRANGE a 0 -1	// 2
      LRANGE b 0 -1 	// 1
      
    • LREM:删除List重复的n个节点,LREM <key> <count> <elem>

      LPUSH a 1 2 1 2 3
      LREM a 2 1		// 删除2个重复的1
      LRANGE a 0 -1	// 3 2 2 
      
    • LINDEX:获取指定下标的节点,LINDEX <key> <index>

      LPUSH a a b c
      LINDEX a 1	// b
      
    • LINSERT:在节点(positionElem)的前面(BEFORE)还是后面(AFTER)插入一个节点(insertElem),LINSERT <key> BEFORE|AFTER <positionElem> <insertElem>

      LPUSH a 1 2 3
      LINSERT a BEFORE 2 12
      LRANGE a 0 -1	// 3 12 2 1
      
    • LSET:设置指定下标节点的新值,LSET <key> <index> <elem>

      LPUSH a 1 2 3
      LSET a 2 22
      LRANGE a 0 -1	// 3 2 22
      
    • LTRIM:将原有List裁剪成指定范围的List,LTRIM <key> <start> <end>

      LPUSH a 1 2 3 4 5
      LTRIM a 0 2
      LRANGE a 0 -1	// 5 4 3
      
  • 相关阅读:
    ASP.NET在禁用视图状态的情况下仍然使用ViewState对象【转】
    Atcoder Regular Contest 061 D Card Game for Three(组合数学)
    Solution 「CERC 2016」「洛谷 P3684」机棚障碍
    Solution 「CF 599E」Sandy and Nuts
    Solution 「洛谷 P6021」洪水
    Solution 「ARC 058C」「AT 1975」Iroha and Haiku
    Solution 「POI 2011」「洛谷 P3527」METMeteors
    Solution 「CF 1023F」Mobile Phone Network
    Solution 「SP 6779」GSS7
    Solution 「LOCAL」大括号树
  • 原文地址:https://www.cnblogs.com/dagger9527/p/12985701.html
Copyright © 2020-2023  润新知