1、有序集合(ordereset)用在哪里?
排行榜、成绩排名
2、跳表 数据结构?
a、有序的数据结构,增删改查,数组,增删时存在大量数据移动
b、有序的链表,增删改查:O(n)。如何增加查找的效率?增加一层有序链表可以增加查找效率。如果数据量大,可以继续增加有序链表。
(1)如何增加有序链表?
二分方法,依次增加链表。例如共有七个数,第一层1、2、3、4、5、6、7. 第二层1、3、5、7. 第三层1、5.
但是这种方法存在问题:对于增、删情况,可能会导致所有层都会改变。这样代价较高。
3、redis跳表的实现原理:
源码分析?redis nginx skynet memcache等
a、明确目标,主题,redis跳表实现
b、构造环境数据测试,调试
c、验证我们的目标
有序集合是如何存储的。
1、当有序集合的节点的个数 大于 128 的时候,或者 任意节点 的member长度大于64的时候,采用跳表
2、否则使用 ziplist
数据量少的时候,使用跳表(skiplist)并不合适,所以要满足上面的条件。
红黑树:增删改查的时间复杂度 O(log n),
跳表:增删改查的时间复杂度O(log n)大概率
技术成长线路:5年以上 需要提升自己的 后台开发 应该是后台主管
1、从源码中学习, 1)nginx:数据结构、slab、upstream、机制的设计 2)redis:建立连接到数据处理、数据的存储原理、数据键值、磁盘同步、rdb 、aof 网络io 3)zerom:服务与服务、推拉模型、监听发布模型、请求回应、底层网络通信机制、架构实现
2、 提高造轮子能力,线程池、消息队列、内存池、请求池、高性能高并发io,自己实现epoll reactor proactor 网络协议栈 nginx模块开发, 锁,cas,公平锁,数据的乐观锁和悲观锁
3、集群的能力。redis哨兵模式 一致性hash mysql的集群
4、linux内核,内核编译,内核更换,网卡子系统,内存管理,
5、mysql linux调优
6、docker 运维部署的能力
7、学习一线大厂的架构
面试:
滴滴 2020年面试真题:
redis的对象类型有哪些?以及底层的数据结构(有序集合 hash)?
头条 2020年面试真题:
zset的底层是用什么数据结构实现的。