• 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
      
  • 相关阅读:
    hibernate联合主键 注解方式
    使用Json出现java.lang.NoClassDefFoundError解决方法
    Spring 定时任务2
    Spring 定时任务1
    Javasocket1
    volatile
    Java中byte与16进制字符串的互相转换
    Spring 源码学习
    web服务器工作原理
    SpringMVC国际化
  • 原文地址:https://www.cnblogs.com/dagger9527/p/12985701.html
Copyright © 2020-2023  润新知