总目录:https://www.jianshu.com/p/e406a9bc93a9
数据库 - 子目录:https://www.jianshu.com/p/4499e57a5604
list
string类型适合存储整体有关联的数据,hash类型适合存用来交互的数据,所有存储量就受到了限制。那么有没有一种类型可以存储大量的数据的同时也很灵活呢,这就是list类型。
list类型
- 数据存储需求:存储多个数据,并对数据进入空间的顺序进行区分
- 需要的存储结构:一个存储空间,保存多个数据。且通过数据可以体现进入顺序
- list类型:保存多个数据,底层通过双向链表实现。
基础操作
-添加/修改数据
因为list类型是双向链表实现的,所以就有了左侧写入和右侧写入的区别。
添加lpush key value1 value2...
rpush key value1 value2...
- 获取数据
同样,redis的list和大部分编程语言的list一样,也是有索引的。
查找1lrange key start top
lindex key index
llen key
这样就能看出,左侧插入与右侧插入的不同了,左侧插入取出后的顺序会颠倒。
查找2-删除数据(有返回值)
删除lpop key
rpop key
删除操作会删除链表中最后一个数据。
扩展操作
- 规定时间内获取并移除数据
blpop key1 [ksy2] timeout
brpop key1 [key2] timeout
我们先pop一个不存在的value,过了我们设置的5s后,报错,中止操作。
然后我们再pop一下,但是给他设置一个稍微长一些的时间,然后再另一个命令行内push进去一个值,这样本来的命令行就会取到value,返回取到的值并删除。
- 移除指定数量的指定数据
示意lrem key count value
其他使用方式
注意事项
- list保存的数据类型都是string数据类型,容量最大是232-1
- list具有索引的概念,但是操作时是以队列的形式进行出队入队。
- list可以对数据进行分页操作,通常第一页数据以list形式展开,以后以数据库形式展开。
应用场景1
日志消息队列
公司内会有很多集群,每时每刻在产生格式不同的各类日志,但是突然集群宕机了,运维就需要去阅读日志,找出错误。
一般情况下日志都在各自集群内保存着,但是这样的话阅读起来阻碍很多,所以就需要一个统一的东西来保存所有的日志。
解决方案
- 依赖list的顺序特征
- 使用队列模式解决多路信息汇总合并的问题
- 使用栈模型结局最新消息的问题
网友评论