Redis
文章平均质量分 95
从源码分析到实战,结合实际分析
liuwangleoooO
失败了 别给自己找理由 就是菜而已!
展开
-
redis源码阅读—对象object
文章目录RedisObject数据结构对象基本操作对象创建对象释放其他操作函数Object 交互指令RedisObject数据结构源码位置:server.htypedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or原创 2021-01-22 16:13:12 · 239 阅读 · 1 评论 -
redis源码阅读—ziplist(压缩表)
文章目录简介ziplist结构定义源码部分新建ziplistziplist entry的组成更新连锁更新获取节点索引查找删除推荐文章关于ziplist结构的详解:https://www.cnblogs.com/charlieroro/p/12815269.html源码API阅读:https://blog.csdn.net/weixin_45827856/article/details/103377947https://blog.csdn.net/programmeringlearner/articl原创 2021-01-14 14:33:32 · 426 阅读 · 0 评论 -
redis源码阅读—intset(整数集合)
文章目录整数集合数据结构定义操作API创建插入https://blog.csdn.net/mijar2016/article/details/52197963https://blog.csdn.net/yangbodong22011/article/details/78671625源码位置: intset.h:数据结构的定义 intset.c:创建、增删等操作实现整数集合intset是Redis内存数据结构之一,和之前的 sds、 skiplist、dict、adlist 等通用数据相比,它是Re原创 2021-01-09 17:43:02 · 159 阅读 · 0 评论 -
redis源码阅读—hyperloglog(基数统计)
文章目录背景基数统计伯努利试验估算优化Hyperloglog实现过程比特串分桶对应看看源码创建hll对象添加元素使用dense方式存储计算基数合并hyperloglog键回头再想想其实在看hyperloglog源码之前,redis里这个高级数据类型都没有用过,只是了解一点它的命令。主要是用来基数统计,如日活用户统计(针对千万级别的访问量,如果实际没有那么大hashmap和bitmap都可以解决)这种需求会使用这种数据类型,性能会高很多。看了源码之后才发现,真是不太能看懂,里边涉及很多的算法和数学知识,尽管原创 2021-01-07 02:34:05 · 757 阅读 · 0 评论 -
redis源码阅读—zskiplist 跳跃表
文章目录简介结构定义zskiplist 结构zskiplistnode操作API创建参考文章图解redis跳跃表redis之zskiplistRedis源码分析(skiplist)学java的小姐姐 redis跳跃表简介跳跃表是Redis zset的底层实现之一,zset在member较多时会采用跳跃表作为底层实现,它在添加、删除、查找节点上都拥有与红黑树相当的性能,它其实说白了就是一种特殊的链表,链表的每个节点存了不同的“层”信息,用这种分层存节点的方式在查找节点时能跳过些节点,从而使添加、原创 2021-01-04 21:15:12 · 542 阅读 · 0 评论 -
redis源码阅读—sds
文章目录sdshdr定义sds逻辑图sds优势更快的获取字符串长度杜绝缓冲区溢出减少修改字符串时带来的内存重分配次数二进制安全关键代码获取常见值创建对象添加字符(扩容)重点!!!sdshdr定义真实的数据并不是直接存储,也有封装,看下面的代码就知道分为五种,分别是sdshdr5,sdshdr8,sdshdr16,sdshdr32,sdshdr64。sdshdr5和另外四种的区别比较明显,sdshrd5其实对内存空间的更加节约。包括已用长度len,总长度alloc(分配的长度),标记flags,实际数据b原创 2020-12-26 19:40:45 · 505 阅读 · 0 评论 -
redis源码阅读—adlist
文章目录链表的定义链表逻辑图链表的创建和操作源码阅读创建表头清空表添加元素到表头添加元素到表尾插入删除链表的定义每一个节点都是listNode,拥有前驱节点,后继节点和值,其实就是C语言中链表中的结点。typedef struct listNode { struct listNode *prev; //前驱节点,如果是list的头结点,则prev指向NULL struct listNode *next; //后继节点,如果是list尾部结点,则next指向NULL void原创 2020-12-28 14:05:17 · 349 阅读 · 0 评论 -
redis源码阅读—dict(字典结构)
文章目录前言常用API介绍逻辑结构图结构定义字典哈希表哈希表节点rehash图解rehash条件rehash实现渐进式rehash图解源码阅读创建并初始化字典字典添加字典替换字典删除前言Redis 的字典使用哈希表作为底层实现, 一个哈希表里面可以有多个哈希表节点, 而每个哈希表节点就保存了字典中的一个键值对。接下来将介绍 Redis 的哈希表、哈希表节点、以及字典的实现,包括字典实现的源码分析。常用API介绍#hset 插入数据hset myhash name zhangsan age 22原创 2020-12-29 16:04:46 · 963 阅读 · 0 评论 -
Redis命令参考手册(五大基本数据类型)
参考文档:http://redisdoc.com/原创 2021-01-27 16:12:33 · 1716 阅读 · 0 评论