3.30--Redis之常用数据结构--listpack(总结篇)------加油呀

Posted 奔赴在自己的热爱中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.30--Redis之常用数据结构--listpack(总结篇)------加油呀相关的知识,希望对你有一定的参考价值。

quicklistNode 还是用了压缩列表来保存元素,压缩列表连锁更新的问题,来源于它的结构设计,所以要想彻底解决这个问题,需要设计一个新的数据结构。

listpack,目的是替代压缩列表,它最大特点是 listpack 中每个节点不再包含前一个节点的长度了,压缩列表每个节点正因为需要保存前一个节点的长度字段,就会有连锁更新的隐患。

listpack 结构

istpack entry 是 listpack 的节点

每个 listpack 节点结构如下:

主要包含三个方面内容:

1.encoding,定义该元素的编码类型,会对不同长度的整数和字符串进行编码;
2.data,实际存放的数据;
3.len,encoding+data的总长度

listpack 没有压缩列表中记录前一个节点长度的字段了,listpack 只记录当前节点的长度,当我们向 listpack 加入一个新元素的时候,不会影响其他节点的长度字段的变化,从而避免了压缩列表的连锁更新问题。

Redis===》数据类型之列表有序无序,常用命令,RDBAOFRDB+AOF

Redis===》数据类型之列表、有序、无序,常用命令,RDB、AOF、RDB+AOF

一、redis数据类型

1.列表

redis列表就是redis的字符串类型的集合,按照插入顺序排序
#1.从左边插入数据(后进先出)
127.0.0.1:6379> lpush peopel yyy
(integer) 1
127.0.0.1:6379> lrange peopel 0 -1
1) "yyy"
127.0.0.1:6379> lpush peopel yyy man shanghai
(integer) 4
127.0.0.1:6379> lrange peopel 0 -1  #从头部插入
1) "shanghai"
2) "man"
3) "yyy"
4) "yyy"

#2.从右边插入数据(先进先出)
127.0.0.1:6379> rpush peopel abc
(integer) 5
127.0.0.1:6379> lrange peopel 0 -1
1) "shanghai"
2) "man"
3) "yyy"
4) "yyy"
5) "abc"

#3.查看看数据
127.0.0.1:6379> lrange peopel 0 -1  #从开始到结束
1) "shanghai"
2) "man"
3) "yyy"
4) "yyy"
5) "abc"
127.0.0.1:6379> lrange peopel 2 4  #从第二位到第四位
1) "

以上是关于3.30--Redis之常用数据结构--listpack(总结篇)------加油呀的主要内容,如果未能解决你的问题,请参考以下文章

python 循环中使用多线程

链式存储 查找 删除结点

浙大数据结构第二版 习题3.5 求链表的倒数第m个元素 答案错了一点

[PTA] 数据结构与算法题目集 6-1 单链表逆转

数据结构之哈希表

Mysql之常用操作