ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis List类型

2020-05-29 09:53:50  阅读:297  来源: 互联网

标签:.. List Redis LRANGE key 类型 节点 LPUSH


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
    

标签:..,List,Redis,LRANGE,key,类型,节点,LPUSH
来源: https://www.cnblogs.com/dagger9527/p/12985701.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有