企业网站新闻如何建设,搜索引擎优化原理,有哪些官网做得比较好,如何做镜像网站数据结构
Redis无论什么数据类型#xff0c;存储的时候都是以键值对key-value形势存储#xff0c;并且所有的key都是String类型#xff0c;本文讨论的数据类型是value的数据类型。
List类型
概述#xff1a;list类型可以存储一个有序的字符串列表#xff0c;为了方便理…数据结构
Redis无论什么数据类型存储的时候都是以键值对key-value形势存储并且所有的key都是String类型本文讨论的数据类型是value的数据类型。
List类型
概述list类型可以存储一个有序的字符串列表为了方便理解我把他类比于于Java中的LinkedList双向链表既然是链表那就可以链表两端快速插入或删除因为是双向链表结构就注定了查询较慢。
List常用命令
命令描述lpush key node1 node2 …把节点node1 node2 node3 依次从插入到链表的最左边rpush key node1 node2 …把节点node1 node2 node3 依次从插入到链表的最右边lpop key删除链表左边的第一个节点并返回节点字符串rpop key删除链表右边的第一个节点并返回节点字符串llen key获取链表的长度linsert key before/after targetValue node将nade插入到目标值targetValue前面或者后面lset key index node将node插入到指定index位置ltrim key start end将链表截断只保留start到end位置的nodeblpop key timeout node移出列表的第一个node并返回改node如果没有node会一直等待到超时brpop key timeout node移出列表的最后一个node并返回改node如果没有node会一直等待到超时
List类型底层数据结构
ziplist压缩列表是一种内存紧凑的数据结构是连续的内存存储效率较高但是ziplist结构没次修改数据的时候都会导致内存重新分配当列表中node节点比较多的时候每次内存分配可能会导致大批量的数据拷贝影响性能因此当列表只有少量元素的时候才会选择使用ziplist作为list的底层数据结构List每个元素占用的字节数小于64字节List的元素数量小于512个满足这两个条件的时候使用ziplist结构存储。linkedList有序双向链表可以类比Java中的LinkedList因为是双向列表除了保存数据之外还要保存两个指针内存开销比较大而且linkedList的各个节点是单独的内存模块不是连续的内存容易产生内存碎片。quickList结合了linkedlist和ziplist两者的优势其本质还是一个链表只是链表的每个node都是一个ziplist。
quickList数据结构? quickList数据结构示意图如下 zipList数据结构在 Redis数据类型–Hash类型详解及应用中有讲解。 根据数据结构可知quickList就是zipList的升级版本优化点在于每个quickListNode节点中的ZipList的个数。
quickListNode的zipList越小就会占用更多的空间极端情况下就会每个node的ziplist会退化为linkedlist。quicklistNode的zipList如果过大就可能退化为zipList就会有连锁更新问题影响性能。
综上所述可知合理配置很重要Redis官方提供了 list-max-ziplist-size配置项。
list-max-ziplist-size 配置项每个值的含义如下
-1每个quickList节点上的zipList大小最大4KB。-2每个 quicklist 节点上的 ziplist 大小最大 8KB官方推荐值。-3每个 quicklist 节点上的 ziplist 大小最大 16KB。-4每个 quicklist 节点上的 ziplist 大小最大 32KB。-5每个 quicklist 节点上的 ziplist 大小最大 64KB 。 以上配置可以根据自己的需求进行修改一般不建议修改使用默认值即可。
List的应用场景
可以用做消息队列利用其pop和push及阻塞的特性来实现消息队列。最新列表list类型的lpush命令和lrange命令实现最新列表的功能。
如有不正确的地方请各位指出纠正。