深入redis内部--字典实现】的更多相关文章

redis的字典定义和实现在dict.h和dict.c文件中. 1.字典结构 typedef struct dict { dictType *type; //定义了字典需要的函数 void *privdata; dictht ht[]; //哈希表结构 int rehashidx; //下一个需要扩容的字典编号,若rehashidx == -1 则不会进行重新散列. int iterators; //当前正在运行的迭代器数目 } dict; 其中涉及到数据结构,如下所示: 1.1 字典类型,包含…
在Redis的内部,数据结构类型值由高效的数据结构和算法进行支持,并且在Redis自身的构建当中,也大量用到了这些数据结构. 这一部分将对Redis内存所使用的数据结构和算法进行介绍. 动态字符串 Sds(Simple Dynamic String,简单动态字符串) Sds在Redis中的主要作用有以下两个: 1. 实现字符串对象(StringObject): 2. 在Redis程序内部用作char* 类型的替代品: 对比C 字符串,sds有以下特性: –可以高效地执行长度计算(strlen):…
最大感受,无论从设计还是源码,Redis都尽量做到简单,其中运用到的原理也通俗易懂.特别是源码,简洁易读,真正做到clean and clear, 这篇文章以unstable分支的源码为基准,先从大体上整理Redis的对象类型以及底层编码. 当我们在本文中提到Redis的“数据结构”,可能是在两个不同的层面来讨论它. 第一个层面,是从使用者的角度,string,list,hash,set,sorted set 第二个层面,是从内部实现的角度,属于更底层的实现,   ht(dict),raw,em…
最大感受,无论从设计还是源码,Redis都尽量做到简单,其中运用到的原理也通俗易懂.特别是源码,简洁易读,真正做到clean and clear, 这篇文章以unstable分支的源码为基准,先从大体上整理Redis的对象类型以及底层编码. 当我们在本文中提到Redis的“数据结构”,可能是在两个不同的层面来讨论它. 第一个层面,是从使用者的角度,string,list,hash,set,sorted set 第二个层面,是从内部实现的角度,属于更底层的实现,   ht(dict),raw,em…
redis内部数据结构,是指redis在自身的构建中,基于这些特定的内部数据结构进行的. 简单动态字符串:Simple Dynamic String 双端链表 字典:Dictonary 跳跃表:skipList 简单动态字符串 用途 实现字符串对象(StringObject): 在 Redis 程序内部用作 char* 类型的替代品: 数据结构 typedef char *sds; struct sdshdr { // buf 已占用长度 int len; // buf 剩余可用长度 int f…
Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) 简单动态字符串 双端链表 字典(dictionary/map/associative array) 跳跃表(skiplist) 下面将对以上的各个类型在redis内部的实现进行分析. 一.sds (simple dynamic string) 简单动态字符串 Redis并没有使用C的字符串,而是在其…
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号[Java技术江湖]的<探索Redis设计与实现>其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有…
本文是<Redis内部数据结构详解>系列的第六篇.在本文中,我们围绕一个Redis的内部数据结构--skiplist展开讨论. Redis里面使用skiplist是为了实现sorted set这种对外的数据结构.sorted set提供的操作非常丰富,可以满足非常多的应用场景.这也意味着,sorted set相对来说实现比较复杂.同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学校里的算法课都没有对这种数据结构进行过详细的介绍.因此,为了介绍得足够清楚,本文会比这个系列的…
本文是<Redis内部数据结构详解>系列的第二篇,讲述Redis中使用最多的一个基础数据结构:sds. 不管在哪门编程语言当中,字符串都几乎是使用最多的数据结构.sds正是在Redis中被广泛使用的字符串结构,它的全称是Simple Dynamic String.与其它语言环境中出现的字符串相比,它具有如下显著的特点: 可动态扩展内存.sds表示的字符串其内容可以修改,也可以追加.在很多语言中字符串会分为mutable和immutable两种,显然sds属于mutable类型的. 二进制安全(…
本文介绍Redis的字典(是种Map)扩容与ConcurrentHashMap的扩容策略,并比较它们的优缺点. (不讨论它们的实现细节) 首先Redis的字典采用的是一种‘’单线程渐进式rehash‘’,这里的单线程是指只有一个线程在扩容, 而在扩容的同时其他的线程可以并发的进行读写. Redis系统后台会定时给予扩容的那个线程足够的运行时间,这样不会导致它饿死. 大致过程是这样的: ht[0],是存放数据的table,作为非扩容时容器. ht[1],只有正在进行扩容时才会使用,它也是存放数据的…