• 【Redis学习笔记】第二章【2.3】Redis数据类型--list



    在这里插入图片描述



    1、引入

    关于线性表、顺序表、链表、双向链表这几种数据结构的温习:
    在这里插入图片描述

    关于双向链表,即每个人记住自己前后的两个人是谁,来个示意图:
    在这里插入图片描述

    2、list类型

    存储多个数据,并对数据进入存储空间的顺序进行区分,底层使用了双向链表进行存储。(value是一个list)

    在这里插入图片描述

    经典特点:

    • 有顺序
    • 存储多个数据

    3、list类型数据的基本操作

    • 添加/修改数据
      lpush key value1 value2 …
      rpush key value1 value2 …

    • 获取数据
      lrange key start stop --获取指定范围
      lindex key index --获取指定索引
      llen key --获取key对应的value链表的长度

    • 获取并移除一个数据
      lpop key
      rpop key

    举例:

    ***注意左push和有push的效果
    
    127.0.0.1:6379> lpush list01 1 2 3
    (integer) 3
    127.0.0.1:6379> lrange list01 0 2
    1) "3"
    2) "2"
    3) "1"
    
    右进左出
    127.0.0.1:6379> rpush list02 1 2 3
    (integer) 3
    127.0.0.1:6379> lrange list02 0 -1  //-1即最后一个value
    1) "1"
    2) "2"
    3) "3"
    
    127.0.0.1:6379> rpop list02
    "3"
    127.0.0.1:6379> lrange list02 0 -1
    1) "1"
    2) "2"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4、list 类型数据扩展操作

    • 规定时间内获取并移除数据。b即block阻塞

      blpop key1 [key2] timeout
      brpop key1 [key2] timeout

    • 移除指定数据
      lrem key count value --移除哪个value,移除几个

    举例:

    127.0.0.1:6379> lpush mq a b 
    (integer) 2
    
    127.0.0.1:6379> blpop mq 5
    1) "mq"
    2) "b"
    127.0.0.1:6379> blpop mq 5
    1) "mq"
    2) "a"
    
    127.0.0.1:6379> blpop mq 5
    (nil)
    (5.06s)
    //此时若在等待1s的时候,在另一个窗口插入了一个value,则任务终止,并返回
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    127.0.0.1:6379> rpush mq a b c d q w e a s a d a
    (integer) 12
    
    //移除a,移除3个
    127.0.0.1:6379> lrem mq 3 a 
    (integer) 3
    127.0.0.1:6379> lrange mq 0 -1
    1) "b"
    2) "c"
    3) "d"
    4) "q"
    5) "w"
    6) "e"
    7) "s"
    8) "d"
    9) "a"
    //移除的是前三个a,右进左出!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    注***

    • list中保存的数据都是string类型的,数据总容量是有限的,最多 2^32- 1 个元素
    • list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作(lpush、rpush)
    • 获取全部数据操作结束索引用-1
    • 分页操作时,通常第一页的信息来自于list,以加快页面呈现速度,第2页及更多的信息通过数据库的形式加载

    5、list类型的应用场景

    场景一:朋友圈点赞与取消点赞

    微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息, 如果取消点赞,移除对应好友信息
    在这里插入图片描述

    lrem指令去实现这个效果,redis可应用于具有操作先后顺序的数据控制。

    场景二:用于最新消息的展示

    使用list类型使得数据具有顺序的特征,从而解决多路信息合并汇总后仍有顺序的问题:

    实际场景:

    企业运营过程中,系统将产生出大量的运营数据,比如运维日志,其存于多台服务器,而最终又想按照顺序汇总查看,则可利用redis的list类型

    在这里插入图片描述

  • 相关阅读:
    java 企业工程管理系统软件源码 自主研发 工程行业适用
    【Java题】输出基本数据类型的最大值和最小值,以及float和double的正无穷大值和负无穷大值
    【Web开发】Python实现Web表格功能(D-Tale, Pandas, Flask)
    AUTOSAR LIN: LDF(LIN Description File)文件解析
    【数据结构】数组和字符串(二):特殊矩阵的压缩存储:对角矩阵——一维数组
    国际化项目开发中关于时间的问题一
    第8章 Spring(二)
    华为云云服务器云耀L实例评测 | 智能不卡顿:如何实现流畅的业务运行
    指针,动态内存分配
    Transformer面试十问
  • 原文地址:https://blog.csdn.net/llg___/article/details/126322447