Redis底层数据结构-Intset源码分析 简介Intset是一个有序的,存储Integer类型数据的结构,当元素为64位有符号整数范围之内时,它是Redis数据结构中有序集合ZSET的底层实现,但是当元素个数超过一定数量时(默认为512),会转为hashtable进行存储,由配置项set-max-intset-entries 512决定。如果向有序集合中添加非整型变量,底层实现也会装欢为hashtable。 数据结构intset结构如下: 2020-06-20 Redis > 源码分析 #数据结构 #源码分析 #Redis
Redis底层数据结构-Dict源码分析 简介字典是一种用来存储键值对的数据结构。Redis本身就是KV型数据库,整个数据库就是用字典进行存储的,对Redis的增删改查操作,实际上就是对字典中的数据进行增删改查操作。 数据结构HashTable table:指针数组,用于存储键值对,指向的是dictEntry结构体,每个dictEntry存有键值对 size:table数组的大小 sizemask:掩码,用来计算键的索引值。值恒为size 2020-05-29 Redis > 源码分析 #数据结构 #源码分析 #Redis
Redis底层数据结构-ZipList源码分析 简介压缩列表(ziplist)的本质是一个字节数组,主要是Redis为了节省内存而设计的数据结构。在Redis的list和hash都使用了ziplist,当list或hash的元素个数比较少,并且元素都是短字符串或小整数值时,使用ziplist作为其底层数据结构。 压缩列表的基本结构基本如下所示: <zlbytes> <zltail> <zllen> <e 2020-05-26 Redis > 源码分析 #数据结构 #源码分析 #Redis
Redis底层数据结构-SkipList源码分析 简介跳表(SkipList)通过对有序链表添加多级索引,从而实现类似于二分查找效果的有序链表,它的插入/删除/搜索的平均时间复杂度为O(log n),该数据结构可以用来代替平衡树以提高效率。其基本结构如 下图所示: 如果此时查找51的节点,步骤基本如下: 从第二层开始查找,1比51小,向后比较 21比51小,21后面为NULL,下降到第一层的21先后比较 第一层中21的ne 2020-05-25 Redis > 源码分析 #数据结构 #源码分析 #Redis
Redis底层数据结构-SDS 简介简单动态字符串(Simple Dynamic Strings)是Redis的基本数据结构之一,主要用于存储字符串和整型数据。SDS兼容C语言标准字符串处理函数,同时保证了二进制安全。 数据结构原始版本在Redis 3.2之前,SDS基本结构如下: struct { //buf中已使用字节数 int len; //buf中剩余字节数 int free; 2020-05-24 Redis > 源码分析 #数据结构 #源码分析 #Redis
设计模式之行为型模式(四) 模板方法模式 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法模式涉及两个角色: 抽象模板角色(Abstract Template):该角色定义多个抽象操作,以便让子类实现。 具体模板角色(Concrete Template):该角色实现抽象模板中的抽象方法 public abstract class Abstr 2020-05-23 设计模式 #设计模式
设计模式之结构型模式(三) 适配器模式 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能在一起工作的两个类可以协同工作,别名为包装器(Wrapper)。 类适配器注意: 类适配器需要继承src类,这要求dst必须是接口,有一定的局限性 src类的方法在Adapter中会被暴露出来 Adapter需要重写src的方法 /** * @author :L1nker4 * 2020-05-21 设计模式 #设计模式
设计模式之创建型模式(二) 单例模式采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象。 饿汉式静态常量方法demo: class Singleton{ /** * 构造器私有化,外部不能new */ p 2020-05-17 设计模式 #设计模式