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类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146173.html