
redis
kutim
这个作者很懒,什么都没留下…
展开
-
第2章 简单动态字符串
在Redis里面,C字符串只会作为字符串字面量,用在一些无须对字符串值进行修改的地方。在Redis数据库里面,包含字符串值的键值对在底层都是由SDS实现的。除了用来保存数据库中的字符串值之外,SDS还被用作缓冲区:AOF模块中的AOF缓冲区,以及客户端状态中的输入缓冲区。1. SDS 的定义每个sds.h/sdshdr结构表示一个SDS值。// sdshdr 结构st翻译 2015-08-24 16:09:51 · 398 阅读 · 0 评论 -
第24章 监视器
通过执行MONITOR命令,客户端可以将自己变为一个监视器,实时地接受并打印出服务器当前处理的命令请求的相关信息翻译 2015-08-27 13:43:33 · 247 阅读 · 0 评论 -
第20章 Lua脚本
EVAL命令可以直接对输入的脚本进行求值。EVALSHA命令可以根据脚本的SHA1校验和来对脚本进行求值,但这个命令要求校验和对应的脚本必须至少被EVAL命令执行过一次。或者这个校验和对应的脚本曾经被SCRIPT LOAD命令载入过1. 创建并修改Lua环境1.1 创建Lua环境lua_open1.2 载入函数库基础库(b翻译 2015-08-27 10:13:33 · 875 阅读 · 0 评论 -
第23章 慢查询日志
用于记录执行时间超过给定时长的命令请求。服务器配置有两个和慢查询日志相关的选项:slowlog-log-slower-than 选项指定执行时间超过多少微妙的命令请求会被记录到日志上slowlog-max-len选项指定服务器最多保存多少条慢查询日志1.慢查询记录的保存 // 保存慢查询日志的链表 list *slowlog;翻译 2015-08-27 13:39:24 · 301 阅读 · 0 评论 -
第21章 排序
1. SORT 命令的实现2. ALPHA选项的实现通过使用ALPHA选项,SORT命令乐亦对包含字符串值的键进行排序:SORT ALPHA3.ASC选项和DESC选项的实现快排4. BY选项的实现5.带有ALPHA选项的BY选项的实现6.LIMIT选项的实现翻译 2015-08-27 11:02:28 · 252 阅读 · 0 评论 -
第14章 服务器
1. 命令请求的执行过程1.1 发送命令请求1.2 读取命令请求客户端状态的输入缓冲区---》argv和argc---》调用命令执行器1.3 命令执行器(1):查找命令实现1.4 命令执行器(2):执行预备操作比较杂1.5 命令执行器(3):调用命令的实现函数1.6 命令执行器(4):执行后续工作翻译 2015-08-26 14:28:52 · 234 阅读 · 0 评论 -
第12章 事件
Redis服务器是一个事件驱动程序,处理以下两类事件:文件事件:Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,文件事件就是对套接字操作的抽象。时间时间:Redis服务器中的一些操作需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。1.文件事件Redis基于Reactor模式开发了自己的网络事件处理器:称为文件事件处理器翻译 2015-08-26 10:52:42 · 428 阅读 · 0 评论 -
第19章 事务
通过MULTI、EXEC、WATCH等命令实现事务。1. 事务的实现1.1 事务开始MULTI命令的执行标志着事务的开始通过在客户端状态的flags属性中打开REDIS_MULTI标识来完成,1.2 命令入队事务状态:客户端发送的命令为EXEC、DISCARD、WATCH、MULTI四个命令其中的一个,那么服务器立即执行这个命令其他命令,翻译 2015-08-26 17:04:35 · 305 阅读 · 0 评论 -
第13章 客户端
对于每个与服务器进行连接的客户端,服务器都为这些客户端建立相应的redis.h/redisClient结构1.客户端属性/* * 客户端结构 * * 为每个连接到服务器的客户端保存维持一个该结构的映射, * 从而实现多路复用。 */typedef struct redisClient { // socket 文件描述符 int fd;翻译 2015-08-26 13:29:57 · 291 阅读 · 0 评论 -
第18章 发布与订阅
1. 频道的订阅与退订所有频道的订阅关系都保存在服务器状态的pubsub_channels字典里面1.1 订阅频道1.2 退订频道UNSUBSCRIBE2.模式的订阅与退订所有模式的订阅关系都保存在服务器状态的pubsub_patterns链表2.1 订阅模式2.2 退订模式3. 发送消息翻译 2015-08-26 15:47:46 · 262 阅读 · 0 评论 -
第七章 压缩列表
压缩列表是列表键和哈希键的底层实现之一。列表键只包含少量列表项,并且每个列表项要么是小整数,要么是长度比较短的字符串,Redis就使用压缩列表来做列表键的底层实现。1. 压缩列表的构成由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值。2. 压缩列表节点的构成翻译 2015-08-25 15:56:34 · 284 阅读 · 0 评论 -
第6章 整数集合
整数集合是集合键的底层实现之一。1. 整数集合的实现Redis用于保存整数值的集合抽象数据结构,可以保存类型为int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。每个intset.h/intset结构表示一个整数集合typedef struct intset { // 保存元素所使用的类型的长度 uint32_t翻译 2015-08-25 15:15:13 · 324 阅读 · 0 评论 -
第4章 字典
又称符号表、关联数组或映射,用于保存键值对的抽象数据结构。Redis的数据库的底层实现。1. 字典的实现使用哈希表作为底层实现。1.1 哈希表dict.h/dictht结构定义/* * 哈希表 */typedef struct dictht { // 哈希表节点指针数组(俗称桶,bucket) dictEntry **table;翻译 2015-08-25 13:23:15 · 365 阅读 · 0 评论 -
第5章 跳跃表
每个节点中维持多个指向其他节点的指针。支持平均O(logN),最坏O(N)复杂度的节点查找。Redis使用跳跃表作为有序集合键的底层实现之一。Redis只在两个地方用到了跳跃表,一个是实现有序集合键,另一个是在集群节点中用作内部数据结构。1. 跳跃表的实现redis.h/zskiplistNode和redis.h/zskiplist 两个结构定义。zsk翻译 2015-08-25 14:40:49 · 441 阅读 · 0 评论 -
第3章 链表
1. 链表和链表节点的实现每个链表节点使用一个adlist.h/listNode结构来表示/* * 链表节点 */typedef struct listNode { // 前驱节点 struct listNode *prev; // 后继节点 struct listNode *next; // 值 void *value;}翻译 2015-08-24 16:44:16 · 318 阅读 · 0 评论 -
第22章 二进制数组
1. 位数组的表示Redis使用字符串对象来表示位数组,字符串对象使用的SDS数据结构是二进制安全的。使用逆序来保存位数组2. GETBIT命令的实现3. SETBIT命令的实现4.BITCOUNT命令的实现4.1 遍历算法4.2 查表算法4.3 variable-pre翻译 2015-08-27 13:26:05 · 389 阅读 · 0 评论