Redis设计与实现
the cool grass
Advanced Programming in the UNIX Environment
展开
-
Redis的基本介绍
Redis基本概念介绍和特性1.1 Redis基本概念介绍 redis是Remote Dictionary Server(远程数据服务)的缩 由意大利人 antirez开发的一款内存高速缓存数据库 该软件使用C语言编写,它的数据模型为key-value 它支持丰富的数据结构(类型),比如String list hash set sorted set。 可持久化,保证了数据安全...原创 2019-05-16 23:37:46 · 252 阅读 · 0 评论 -
Redis源码剖析--压缩列表ziplist
Redis源码剖析–压缩列表ziplistziplist结构头尾结构节点结构prev_entry_lengthencoding编码和解码ziplist基本操作创建空ziplist插入节点获取指定索引上的节点删除给定节点ziplist小结 压缩列表(ziplist)是由 一系列特殊编码的内存块构成的列表,其是Redis的列表建和哈希键的底层实现...转载 2019-07-01 16:32:58 · 243 阅读 · 0 评论 -
Redis源码剖析--整数集合Intset
Redis源码剖析–整数集合Intsetintset数据结构升级inset基本操作创建intset添加元素移除数据其他操作函数intset小结 本系列博客文章已经分析了Redis的大部分数据结构,包括动态字符串,双端链表,字典,跳跃表等,这些数据结构都非常强大实用,但是在内存消耗方面也非常“巨大”。Redis的数据都是存放在内存上面的,所以对内存的使用要求及...转载 2019-07-01 16:29:47 · 169 阅读 · 0 评论 -
Redis源码剖析--基数统计hyperloglog
Redis源码剖析--基数统计hyperloglog基数统计算法思路伯努利过程基数统计hyperloglog实现数据结构添加元素计算基数合并hyperloglog键hyperloglog小结Update 2016-12-9 Redis中hyperloglog是用来做基数统计的,其优点是:在输入元素的数量或者体积非常非常大的时候,计算...转载 2019-07-01 16:25:05 · 584 阅读 · 0 评论 -
Redis源码剖析--字典dict
Redis源码剖析--字典dict dict数据结构哈希表节点(dictEntry)哈希表dictht字典dict字典类型函数dictType哈希算法rehash算法dict基本操作dict创建添加键值对查找键值对删除键值对字典删除dict小结 字典是Redis中的一个非常重要的底层数据结构,其应用相当广泛。Redi...转载 2019-06-22 11:45:29 · 212 阅读 · 0 评论 -
Redis源码剖析--双端链表sdlist
Redis源码剖析--双端链表sdlist sdlist的数据结构sdlist迭代器结构sdlist基本操作sdlist创建sdlist释放插入节点向头部插入节点向尾部添加节点向任意位置插入节点删除节点迭代器相关操作获取迭代器释放迭代器重置迭代器获取下一个迭代器链表复制函数查找函数链表旋转函数sdlist小结 ...转载 2019-06-22 11:43:56 · 652 阅读 · 0 评论 -
Redis源码剖析--动态字符串sds
Redis源码剖析--动态字符串sds sds数据结构定义sds基本操作函数sds创建函数sds释放函数sds动态调整函数sds连接操作函数sds其他操作函数sds小结 Redis没有使用C语言的字符串结构,而是自己设计了一个简单的动态字符串结构sds。它的特点是:可动态扩展内存、二进制安全和与传统的C语言字符串类型兼容。下面就从源...转载 2019-06-22 11:42:07 · 377 阅读 · 0 评论 -
Redis源码剖析--内存分配
Redis源码剖析--内存分配 功能函数总览内存管理函数内存申请函数zmalloc内存申请函数zcalloc内存调整函数zrecalloc内存释放函数辅助函数字符串复制方法设置异常处理函数开启线程安全获取已使用内存 深受侯捷老师的《STL源码剖析》一书的影响,在该书中开篇就对STL的空间配置器进行了一个详尽的介绍。以应用的角...转载 2019-06-22 11:39:31 · 286 阅读 · 0 评论 -
redis 学习
原创 2019-06-09 17:04:49 · 120 阅读 · 0 评论 -
Redis源码分析之sds
1. SDS简介Redis没有直接使用C语言传统的字符串而是自己创建了一种名为简单动态字符串SDS(simple dynamic string)的抽象类型,并将SDS用作Redis的默认字符串表示。在Redis里面,C字符串只会作为字符串字面量(string literal)用在一些无须对字符串值进行修改的地方,比如打印日志。当Redis需要的不仅仅是一个字符串字面量,而是一个字符串值时,R...原创 2019-05-18 17:25:19 · 598 阅读 · 2 评论 -
Redis是单线程还这么快?
为什么说Redis是单线程的以及Redis为什么这么快!一、前言近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。如果你在...转载 2019-05-16 20:51:32 · 197 阅读 · 0 评论 -
Redis源码剖析--跳跃表 zskiplist
跳跃表数据结构跳跃表基本操作创建跳跃表插入节点跳跃表删除获取给定分值和成员的节点的排名区间操作跳跃表小结 跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问的目的。跳跃表在插入、删除和查找操作上的平均复杂度为O(logN),最坏为O(N),可以和红黑树相媲美,但是在实现起来,比红黑树简单很多。说起跳跃表,在前段时间面...转载 2019-07-01 10:31:27 · 224 阅读 · 0 评论