redis
mijar2016
一位三流学校毕业的学生,敲着四流的代码,为了希望而努力,为了明天而坚持。
展开
-
redis源码分析-dict(字典结构)
—、简介众所周知,字典是采用哈希表结构实现的。redis也不例外,代码位于dict.c 和 dict.h。为了解决hash键冲突的问题,redis采用“拉链式”进行设计。 由于网上有大量的hash结构及相关操作说明,笔者将不再介绍。本文的重点主要讲解dict的数据结构、运作流程及rehash实现。二、数据结构redis字典由dictEntry(节点)、dictType(类型)、dic原创 2016-07-18 21:18:57 · 785 阅读 · 0 评论 -
redis源码分析-adlist(链表)
一、介绍上一节,介绍了sds结构,接下来将介绍下redis的adlist(又称链表).redis的链表采用双向链表方式进行实现,代码位于src/adlist.h、src/adlist.c .二、数据结构C语言数据结构中双向链表结构由节点(listNode)、迭代器(listIterator)、容器(list)组成,redis也是如此。节点typedef struct listNode {原创 2016-07-10 17:22:59 · 566 阅读 · 0 评论 -
redis源码分析-sds字符串
介绍等待简易动态的sds字符串1.介绍在c语言中,一般使用char*定义字符串类型,但redis却采用sds结构保存字符串。那么redis为什么弃用char而改用sds呢?这样做是基于哪方面的考虑?这样做的优点又有哪些呢?2.char与sds比较首先,回到原点,我们看下sds的数据结构(以下为3.0版本代码)。struct sdshdr { int len原创 2016-07-04 21:25:19 · 554 阅读 · 0 评论 -
redis源码分析-intset(整型集合)
intset,一种特殊的set数据结构,由多个整型元素组成。intset也是一个有序整型集合,其内部设计非常精巧。intset数据结构与往常一样,先了解intset数据结构:typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[];} intset;intset结构由encod原创 2016-08-13 10:24:37 · 3884 阅读 · 1 评论 -
redis源码分析-ziplist(压缩链表)
ziplist结构在redis运用非常广泛,是列表、字典等数据类型的底层结构之一。ziplist的优点在于能够一定程度地节约内存。ziplist构成ziplist结构由zip_header、zip_entry、zip_end三部分组成。ZIP_HEADER:顾名思义,压缩列表的头部。内部包含ZIP_BYTES、ZIP_TAIL、ZIP_LENGTH属性。原创 2016-07-31 11:20:39 · 1634 阅读 · 0 评论 -
Redis2.6 - publish/subscribe的BUG
前一段时间由于业务需要,我们需要搬迁服务器到新机房。为了保证系统平滑过渡,我们分成多批搬迁。迁移工作总体还算顺利,期间也遇到了一点点小挫折。下面将介绍我印象最为深刻的一个BUG:redis2.6的publish/subscribe。进入主题,首先介绍下业务场景及问题。业务场景我们生产环境使用的redis是2.6版本,redis集群只有两台服务器,一主(A)一从(B)。 制定的redi原创 2016-12-30 20:19:41 · 1349 阅读 · 0 评论