redis
陈鸿儒
这个作者很懒,什么都没留下…
展开
-
Redis源码学习之【事件机制】
介绍 Redis实现了自己的一套和libevent类似的事件驱动机制,主要用于处理时间事件和文件事件。文件事件底层主要是指网络IO事件的处理,底层使用的可能是select,epoll,或者是kqueue。Redis使用自己实现的AE而不是像memcache使用的libevent使得其性能更好,因为libevent为了其通用性增加了很多扩展功能显然会降低使用它的性能。 源码 ae.h ae.c转载 2014-01-06 11:48:17 · 560 阅读 · 0 评论 -
redis源码分析之配置文件
1原创 2014-05-26 15:17:06 · 516 阅读 · 0 评论 -
redis源码分析之RDB文件
暂无原创 2014-05-16 16:40:45 · 855 阅读 · 0 评论 -
redis源码命令分析--关键字keys命令
DEL key [key ...]删除一个key 命令:del key1 key2 key3 redis协议:*$4\r\n$3\r\ndel\r\n$4\r\nkey1\r\n$4\r\nkey2\r\n$4\r\nkey3\r\n 命令主要执行主要函数: delCommand原创 2014-03-24 23:05:26 · 999 阅读 · 0 评论 -
redis源码命令分析--列表lists
BLPOP key [key ...] timeout删除,并获得该列表中的第一元素,或阻塞,直到有一个可用 BRPOP key [key ...] timeout删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用 BRPOPLPUSH source destination timeout弹出一个列表的值,将它推到另一个列表,并返回它;或阻塞原创 2014-03-31 11:13:06 · 526 阅读 · 0 评论 -
Redis源码学习之【epoll封装】
介绍 在上一篇博文中说到了在Redis 的事件处理中使用到了底层的linux epoll,根据Redis的实现可以使用其他的多路通信层,但是在一般的linux服务器中使用的最多的还是epoll所以这里主要介绍一下epoll。Redis并没有直接的使用linux的epoll而是对其进行了一个简单的封装。 源码 ae_epoll.c 分析 在原有的linux epoll的基础上进行封装,主要转载 2014-01-06 11:55:52 · 682 阅读 · 0 评论 -
Redis源码学习之【动态字符串】
介绍 由于在标准C中没有字符串这一类型,因而Redis实现了一个自己的字符串sds。 源文件 sds.h sds.c 分析 数据结构 [cpp] view plaincopy // sds 类型 typedef char *sds; // sdshdr 结构 struct sdshdr { // buf 已占用长度 int l转载 2014-01-06 11:52:06 · 410 阅读 · 0 评论 -
Redis源码学习之【命令协议格式】
介绍 本来这篇要介绍Redis的命令解析的,但是要想对Redis的命令解析有更直观的了解,必须先了解Redis的命令协议格式。 源码 暂无(或者是是在network.c中吧) 分析 Requests * CR LF $ CR LF CR LF ... $ CR LF CR LF Redis最新支持的二进制安全的请求通用格式如上所示。具体的实例有: *3 $3转载 2014-01-06 11:57:39 · 455 阅读 · 0 评论 -
Redis源码学习之【事件机制】
介绍 Redis实现了自己的一套和libevent类似的事件驱动机制,主要用于处理时间事件和文件事件。文件事件底层主要是指网络IO事件的处理,底层使用的可能是select,epoll,或者是kqueue。Redis使用自己实现的AE而不是像memcache使用的libevent使得其性能更好,因为libevent为了其通用性增加了很多扩展功能显然会降低使用它的性能。 源码 ae.h ae.c转载 2014-01-06 11:54:26 · 535 阅读 · 0 评论 -
Redis源码学习之【网络通信框架】
介绍 前面两篇文章主要介绍了Redis对epoll和socket 的封装,这篇就开始详细介绍Redis网络通信的具体实现。简单说来Redis的网络通信主要实现了服务器监听客户端连接并处理的主要流程和实现。 源码 networking.c 分析 网络通信流程 说明 Redis网络通信主要原理和一般的异步网络编程框架类似,都是使用服务器端的socket进行监听到来的连接然后创建该转载 2014-01-06 11:56:58 · 583 阅读 · 0 评论 -
Redis源码学习之【Tcp Socket封装】
介绍 Redis对linux socket的封装,虽然在该封装中也含有对unix socket的封装,但是普遍来说使用的tcp socket。和上一篇的epoll的封装类似,都是通过调用底层的socket的函数完成一些列的方便的函数调用封装。 源码 anet.h anet.c 分析 主要包含以下几个封装函数(这里仅介绍关于Tcp socket的封装函数) anetTcpconnect:转载 2014-01-06 11:56:27 · 544 阅读 · 0 评论 -
Redis源码学习之【哈希字典】
介绍 Redis的哈希字典通过key值来找对应的value。需要注意的是Redis的字典是如何进行rehash的。 源码 dict.h dict.c 数据结构 如上图所示,哈希字典用dict结构体表示,其中含有两个哈希表,主要用于进行rehash操作。同时哈希表使用量表的方式解决冲突。具体的数据结构如下: [cpp] view plaincopy /*转载 2014-01-06 11:53:46 · 574 阅读 · 0 评论 -
Redis源码学习之【链表】
介绍 Redis自己实现了一个含有迭代器的双向链表。基本功能就是通用的双向链表,源码实现还是值得阅读以下的。 源文件 adlist.h adlist.c 分析 这里主要介绍其主要的数据结构其他的链表相关的操作有兴趣的话可以自己去看源码,其中的细节tricky还是挺多的。 [cpp] view plaincopy /* Node, List, and Iterato转载 2014-01-06 11:51:25 · 427 阅读 · 0 评论 -
Redis源码学习之【前言】
前言之前言 本来上年的时候要参与到一个关于Redis中的项目中的,但是由于临时的决定参与到了其他的项目。心中一直对Redis可以说是念念不忘,印象最深的是当初一开始听到Redis的时候,说它是数据库中的AK-47。而作者SalvatoreSanfilippo在实现Redis的时候完全按照标准C进行编写,一切需要的数据结构和算法都是自己实现。编码风格是将编出来的代码像诗歌一样优美。 Redis简转载 2014-01-06 11:50:25 · 469 阅读 · 0 评论 -
redis源码分析之RDB持久化
redis持久化有两种模式,rdb和aof, 一:RDB原创 2014-05-09 15:17:39 · 898 阅读 · 0 评论