![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码
文章平均质量分 67
酱油瓶啤酒杯
这个作者很懒,什么都没留下…
展开
-
Redis-集群节点如何组成-从数据机构入手
1、背景集群中的每个节点都需要专门的数据结构来存储集群的状态和自身信息。分为clusterNode和 clusterState结构:–clusterNode记录了集群中的单个节点的状态– clusterState记录集群所有节点作为一个整体的状态2、clusterNode结构typedef struct clusterNode { //节点创建时间 mstime_t ctime; //节点id char name[REDIS_CLUSTER_NAMELEN];原创 2021-01-26 22:47:52 · 177 阅读 · 0 评论 -
Redis-[整数集合]数据结构-深入解析
1、什么是整数集合整数集合/intset是集合键的底层实现之一:当一个集合只包含整数值元素,并且整个集合的元素数量不多 的时候使用。是Redis用来保存整数值的集合抽象数据结构,可以保存int16_t,int32_t,int64_t类型的整数值2、如何实现整数集合typedef struct intset{ uint32_t encoding;//编码方式 unit32_t length;//元素数量 int8_t contents[];//保存元素的数组}contents数组是整原创 2021-01-14 16:15:22 · 86 阅读 · 0 评论 -
Redis-[跳跃表]数据机构-深入解析
1、跳跃表是什么?跳跃表/skiplist是一种有序数据结构,通过在每个节点上维持多个指向其它节点的指针,达到快速访问节点的目的。节点查找平均复杂度O(logN),最坏情况是O(N),还可以通过顺序性操作来批量处理节点。效率可以和平衡树媲美,在Redis中被应用。在Redis中使用跳跃表作为有序集合键的底层实现之一:1)有序集合见包含的元素数量较多时 2)有序集合键的元素的成员是比较长的字符串时。Redis只在两个地方用到跳跃表:1)实现有序集合键 2)在集群节点中用作内部数据结构。2、有序集原创 2021-01-14 15:32:57 · 111 阅读 · 0 评论 -
Redis-字典数据结构-源码深入解析
1.Redis的字典是什么?Redis字典,又叫符号表/关联数组/映射,是一种用于保存键值对的抽象数据结构。还可以作为Redis数据库的底层,哈希键的底层等。2.如何实现Redis字典自顶向下来实现一个Redis字典,使用Redis的实现语言-C语言1)字典typedef struct dict{ dicType *type;//类型特定函数 void *privdata;//私有数据 dictht ht[2];//哈希表 int trehashidx;//rehash索引,当rehash原创 2021-01-14 12:53:17 · 114 阅读 · 0 评论 -
Redis-链表数据结构-深入分析
1.Redis的链表是什么?我们学数据结构的时候,学完数组应该就会开始链表的学习,链表的思想学习之后才会往下学二叉树这些复杂的数据结构.但已知Redis是用C语言实现的,C语言的API中没有现成的链表结构,需要我们自己写一下...原创 2021-01-13 20:57:05 · 95 阅读 · 0 评论 -
MySQL-InnoDB行锁算法-三种详解
1、行锁是什么?字面意思,给一行数据加锁。InnoDB 行锁是通过给索引上的索引项加锁来实现的,如果没有索引,InnoDB 将通过隐藏的聚簇索引来对记录加锁。注意:行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。 两个事务不能锁同一个索引。2、三种算法(1)Record lock:记录锁,单个行记录上的锁锁住具体的索引项,当SQL执行按照唯一性索引进行数据的检索时,查询条件等值匹配且查询的数据是存在,这时SQL语句加上的锁即为记录锁Record locks,锁住具体的索引项BEGI原创 2021-01-11 16:50:48 · 876 阅读 · 0 评论 -
MySQL-MVCC-深入解析
1、什么是MVCC?MVCC,Multi-Version Concurrency Control,多版本并发控制,是MySQL的默认存储引擎InnoDB实现隔离级别的一种具体方式,能够实现提交读/READ-COMMITTED和可重复读/REPEATABLE-READ两种隔离级别。MVCC指的就是在使用 READ COMMITTDREPEATABLE READ这两种隔离级别的事务在执行普通的 SELECT 操作时,访问记录的版本链的过程。可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。提原创 2021-01-11 16:08:29 · 133 阅读 · 0 评论 -
JVM-双亲委派模型-源码
1、什么是双亲委派模型已知每个类都有对应的类加载器,系统的ClassLoader在协同工作时会默认使用双亲委派模型:在类加载时先判断该类是否被加载过,已加载过的类会直接返回。没加载过的类加载的时候,先把该请求委派该父类加载器的loadClass()处理,由此可知所有的请求都会传送到顶层的启动类加载器。父类加载器无法处理的时候,才会自己进行处理。无父类加载器时启用BootstrapClassLoader作为父类加载器。这⾥的双亲更多地表达的是“⽗ ⺟这⼀辈”的⼈⽽已private final C..原创 2021-01-02 13:37:56 · 177 阅读 · 0 评论 -
集合-ConcurrentHashMap-线程安全底层实现
1、ConcurrentHashMap分段锁JDK1.7是采用分段锁的思想,对整个桶数组进行切割分段(segment),给每一段数据配置一把锁,当一个线程占用锁访问一段数据的时候,其他的数据也能被其他的线程访问到;ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成的:Segment实现了ReentrantLock,是一种可重入锁,来扮演锁的角色;HashEntry用于存储键值对数据。static class Segment<K,V> e原创 2020-12-30 10:18:25 · 116 阅读 · 0 评论 -
源码-JDK1.8HashMap扩容方法resize()解析
1、准备知识HashMap的底层数据结构Java语言的基本数据结构可以分为两种,一种是数组,另一种的模拟指针/引用,Java语言中涉及到的数据结构都是这两种的扩充。JDK1.8之前HashMap是数组+链表结合的链表散列。JDK1.8在解决哈希冲突上发生了变化,当链表长度大于阈值/默认8的时候,会将链表转化为红黑树,减少搜索时间。hash算法我们希望HashMap的元素位置尽量分散,最好是每个位置只有一个元素,这样用hash算法求得该位置后可以直接返回结果,不用再遍历链表/红黑树。H原创 2020-12-13 23:33:21 · 299 阅读 · 0 评论