本文不讲hash算法,而主要是分析redis中的dict数据结构的特性--分步rehash. 首先看下数据结构:dict代表数据字典,每个数据字典有两个哈希表dictht,哈希表采用链式存储. typedef struct dictEntry {//封装键值对 void *key; union {//联合体表示不同数据类型,节省空间 void *val; uint64_t u64; int64_t s64; } v; struct dictEntry *next; } dictEntry; ty…
前段时间翻看了Redis的源代码(C语言版本,Git地址:https://github.com/antirez/redis), 过了一遍Redis数据结构,包括SDS.ADList.dict.intset.ziplist.quicklist.skiplist. 在此进行总结 一.SDS(Simple Dynamic String) 简单动态字符串 SDS是redis最简单的数据结构 sds(简单动态字符串)特点,预先分配内存,记录字符串长度,在原字符串数组里新增加一串字符串. 新长度newlen…
跳跃表是一种随机化的数据结构,在查找.插入和删除这些字典操作上,其效率可比拟于平衡二叉树(如红黑树),大多数操作只需要O(log n)平均时间,但它的代码以及原理更简单. 和链表.字典等数据结构被广泛地应用在Redis内部不同,Redis只在两个地方用到了跳跃表,一个是实现有序集合键,另一个是在集群结点中用作内部数据结构.除此之外,跳跃表在Redis里面没有其他用途. /* ZSETs use a specialized version of Skiplists */ typedef struc…
接着上一篇,这篇文章分析一下redis事务操作中multi,exec,discard三个核心命令. 原文地址:http://www.jianshu.com/p/e22615586595 看本篇文章前需要先对上面文章有所了解: redis源码分析之事务Transaction(上) 一.redis事务核心命令简介 redis事务操作核心命令: //用于开启事务 {"multi",multiCommand,1,"sF",0,NULL,0,0,0,0,0}, //用来执行事…
[redis源码分析]http://blog.csdn.net/column/details/redis-source.html   Redis源代码重要目录 dict.c:也是很重要的两个文件,主要对于内存中的hash进行管理: adlist.c:用于对list的定义,它是个双向链表结构 sds.c:用于对字符串的定义,从头文件可以找到: object.c:用于创建和释放redisObject对象 sort.c:关于排序算法,sort.c具体作为Redis场景下的排序实现. multi.c:用…
源码版本:redis-4.0.1 源码位置: dict.h:dictEntry.dictht.dict等数据结构定义. dict.c:创建.插入.查找等功能实现. 一.dict 简介 dict (dictionary 字典),通常的存储结构是Key-Value形式的,通过Hash函数对key求Hash值来确定Value的位置,因此也叫Hash表,是一种用来解决算法中查找问题的数据结构,默认的算法复杂度接近O(1),Redis本身也叫REmote DIctionary Server (远程字典服务…
redis算是缓存界的老大哥了,最近做的事情对redis依赖较多,使用了里面的发布订阅功能,事务功能以及SortedSet等数据结构,后面准备好好学习总结一下redis的一些知识点. 原文地址:http://www.jianshu.com/p/8209554b36ce 先看下redis发布订阅的结构: 其中发布者跟订阅者之间通过channel进行交互,channel分为两种模式. 一.redis发布订阅命令简介 redis中为发布订阅(pub/sub)功能提供了六个命令,分为两种模式. 由sub…
这周学习了一下redis事务功能的实现原理,本来是想用一篇文章进行总结的,写完以后发现这块内容比较多,而且多个命令之间又互相依赖,放在一篇文章里一方面篇幅会比较大,另一方面文章组织结构会比较乱,不容易阅读.因此把事务这个模块整理成上下两篇文章进行总结. 原文地址:http://www.jianshu.com/p/acb97d620ad7 这篇文章我们重点分析一下redis事务命令中的两个辅助命令:watch跟unwatch. 一.redis事务辅助命令简介 依然从server.c文件的命令表中找…
有序集SortedSet算是redis中一个很有特色的数据结构,通过这篇文章来总结一下这块知识点. 原文地址:http://www.jianshu.com/p/75ca5a359f9f 一.有序集SortedSet命令简介 redis中的有序集,允许用户使用指定值对放进去的元素进行排序,并且基于该已排序的集合提供了一系列丰富的操作集合的API. 举例如下: //添加元素,table1为有序集的名字,100为用于排序字段(redis把它叫做score),a为我们要存储的元素 127.0.0.1:6…
源码版本:4.0.1 源码位置: intset.h:数据结构的定义 intset.c:创建.增删等操作实现 1. 整数集合简介 intset是Redis内存数据结构之一,和之前的 sds. skiplist.dict.adlist 等通用数据相比,它是Redis特有的,用来实现Redis的Set结构(当元素较小且为数字类型时),它的特点有: 元素类型只能为数字. 元素有三种类型:int16_t.int32_t.int64_t. 元素有序,不可重复. intset和sds一样,内存连续,就像数组一…