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

发布于:2023-01-18 ⋅ 阅读:(187) ⋅ 点赞:(0)


在这里插入图片描述



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"

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,则任务终止,并返回

在这里插入图片描述

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,右进左出!

注***

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

5、list类型的应用场景

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

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

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

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

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

实际场景:

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

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看