redis 有序集合、跳表、面试、源码学习

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的底层是用什么数据结构实现的。

原文地址:https://www.cnblogs.com/xiaohaigegede/p/14091729.html