`
donlianli
  • 浏览: 339963 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Elasticsearch...
浏览量:218345
社区版块
存档分类
最新评论

redis源码初探

阅读更多

我是一名软件工程师,6年开发经验。之前主要做项目,今年进入互联网企业,意识到技术的重要性。截止到目前,主要使用语言为Java,最近一时兴起,打算读一下开源软件来开阔一下自己的视野,顺便还能提高自己的技术水平。为什么选择读redis?主要有以下几点:

1redis是一个简单的工程,主要是实现键值对的操作(打算读完redis,接着读memcached)

2redis的代码比较少(这个是之前道听途说),读起来应该比较容易。

3redis是单线程的,不涉及比较复杂的并发操作。

 

所以决定以redis作为读开源软件的开始。

但问题马上就来了,我c语言从毕业到现在,都6年了,从来没有再用过,而redis是用c语言写的。困难是相当的大啊。但我相信,各语言是相通的,凭借Java的扎实基础,应该也不会太费劲。

但是,理想很丰满,现实很骨感。下载下来redis的源码(2.8.4),一开傻眼了。这哪里是1万行,80多个文件,看的眼花缭乱。没有统计,估计怎么也上万了吧(后来统计了一下,大概5万行),这可怎么办呢?应该从哪个文件开始读呢?

Redis2.8.4



 

在这里再跟大家说明一下,我对redis的使用也比较少,除了里面的zscore命令使用过外,其他的也没有用过。前面已经说过,读代码的目的,主要是熟悉开源软件,想借此进一步提高自己的水平。

里面有个redis.c,我估摸着是程序入口,果然,里面有我们可爱的main函数。声明如下:

int main(int argc, char **argv) {

    struct timeval tv;

    /* We need to initialize our libraries, and the server configuration. */

#ifdef INIT_SETPROCTITLE_REPLACEMENT

    spt_init(argc, argv);

#endif

setlocale(LC_COLLATE,"");

……

 

可是前几行就把我吓着了。

虽然能猜个大概意思,但是还是决定把c语言再好好复习一下。到这儿,在google搜索linux c,打开第一个,就开始看了。一遍复习c语言,一遍读redis的源码。

 

聊到这儿,再多点闲话。想学习c语言,首先我想找一个类似eclipseIDE,在网上搜了很多,最终还是觉得eclipse比较靠谱。于是下载了eclipsec/c++版。另外,为了解决在windowredis的包含错误,安装了cygwin软件。但最终,还是不能完全消除redis的编译错误。但已经不影响查看代码,反正我也不在window下面编译代码。

 

跟着《linux c编程一站式学习》走了一遍,回头来看redis源码还是很费劲。后来又一想,学习应该循序渐进,其实redis肯定也是循序渐进的,它也有beta版。那个版本的代码有多少呢?到redis官网找,最终从google上面找的了它的第一版(连接在这里),下载下来一卡,我噻,真是干净极了。头文件加实现,一共13个文件。



 

我想,这13个文件,一定是最核心的几个文件,再对比一下2.8.4,这些文件几乎都存在,因此,我还是先读读beta版,这样,我更容易看清redis的核心内容。

因此,在这个版本的基础上,结合网上的一些资料,我学习到了redis的一些核心数据结构字符串sds,字典(哈希表)dict,双端列表adlist和事件驱动模型ae 其中adlistaea,都是冠词a。表是一个双端列表(A generic doubly linked list)和(A simple event-driven programming library)。

读这些源码的时候,有很多概念也借鉴了别人的一些理解,如果单从源码读,因为里面有很多的系统函数,不是很明白他的意思,理解起来比较慢。

 

 

熟悉了这些基础的概念之后,我想深入探索一下,redis是如何由客户端的命令路由至一个具体的函数的呢?redis是如何控制知道客户端的数据有没有发送完了呢?因为我对网络编程还不太熟悉,特别是网络通信方面。如果想定制redis,增加均衡负载,怎么进行改造呢?这些都是我下一步探索有待研究的。

 

 

对这类话题感兴趣?欢迎发送邮件至donlianli@126.com

关于我:邯郸人,软件工程师

 请支持原创:http://donlianli.iteye.com/blog/2008720

 

献美女一枚。



 

  • 大小: 200.5 KB
  • 大小: 114.6 KB
  • 大小: 24.3 KB
2
3
分享到:
评论
3 楼 商人shang 2014-01-24  
呵呵,邯郸人~
2 楼 darkjune 2014-01-24  
写的也够粗的
1 楼 yjc2020 2014-01-24  
了不起,读C啊,不如看jdk源码 apatch其他源码

相关推荐

    redis/phpredis源码及文档

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 附件里面包括redis源码,phpredis源码,redis指令及文档

    redis源码阅读中文分析注释

    redis源码阅读中文分析注释

    Redis Windows源码

    在Windows环境下,Redis的源码分析和部署对于开发者来说具有重要意义,尤其是在Windows服务端开发中。以下是对"Redis Windows源码"的详细解析: 1. Redis核心架构: Redis基于单线程模型,通过事件驱动机制处理...

    redis源码安装以及配置

    **一、Redis源码安装** 1. **下载源码** 首先,我们需要从Redis官方网站或者GitHub仓库下载源码。在这个例子中,我们使用的是`redis-2.8.9.tar.gz`。你可以通过命令行工具如`wget`或`curl`来下载,或者直接在网页...

    redis源码资源下载

    Redis(Remote Dictionary Server),即远程字典服务,是一个开源的、高性能的、基于内存的Key-Value数据库,它使用ANSI C语言编写,支持网络,并提供了多种语言的API。Redis以其丰富的数据结构、高性能、持久化特性...

    Redis源码学习-Redis源码+电子书+PPT+PDF

    Redis是一款高性能的键值数据库,它的源码学习对于理解其工作原理、优化性能以及进行二次开发至关重要。在Redis源码中,我们可以深入了解其事件驱动模型、数据结构和算法的应用。以下将详细介绍这些知识点。 首先,...

    spring集成redis源码

    spring和redis集成有很多方式,看到网上很多都是使用redistemplate自己去做redis 的一些操作,但是对于我们开发来说,肯定是使用越方便越好,于是乎就有了spring的对redis或者memcahe这些换成框架的封装,只需要引入...

    redis源码日志

    - **第1章:初探redis** - **位置**: Redis在缓存系统中的定位。 - **作用**: 解释Redis如何与其他系统交互以及其核心功能。 - **第2章:redis事件驱动详解** - **概述**: Redis采用事件驱动模型来处理网络请求...

    redis 源码 完整注释

    Redis 是一个高性能的键值对数据库,以其丰富的数据结构、高效的数据操作以及广泛的应用场景而闻名。本资源提供了带有完整注释的 Redis 源代码,对于深入理解 Redis 内部工作原理、优化性能以及进行二次开发具有极大...

    redis源码下载

    redis源码学习。redis作为重要的缓存中间件,在大型的网站架构中基本都有身影,想要详细的了解redis,从源码开始学习。

    ServiceStack.Redis 源码

    ServiceStack.Redis 是一个高度优化、全面的 Redis 客户端库,专为 .NET 开发者设计。这个源代码库提供了用 C# 编写的 Redis 客户端,允许开发者轻松地与 Redis 数据存储进行交互。Redis 是一个开源的、高性能的键值...

    springBoot集成Redis源码

    在本文中,我们将深入探讨如何在Spring Boot应用中集成Redis,并理解其源码背后的机制。Spring Boot是一款由Pivotal团队开发的Java框架,旨在简化Spring应用的初始搭建以及开发过程。而Redis则是一款高性能的键值...

    ssm框架整合redis源码

    在本项目中,"ssm框架整合redis源码"意味着开发者将SSM框架与Redis缓存系统进行了集成,主要目的是实现session共享。Session共享是Web应用中解决用户会话跨服务器问题的关键技术,尤其是在分布式环境下,确保用户...

    redis源码阅读笔记(6)——ziplist

    本文将深入探讨Redis源码中的ziplist,理解其设计原理和实现细节。 ziplist是Redis用来存储简单序列化数据的结构,主要应用于那些元素数量较少且元素大小不大的列表和哈希表。相比于普通的动态数组或哈希表,...

    redis 源码和windows桌面管理工具

    标题中的“redis 源码”指的是Redis的源代码,这对于开发者来说是非常宝贵的资源。通过阅读和分析源代码,开发者可以深入理解Redis的工作原理,学习其设计模式和优化技巧,甚至可以根据需要进行定制化开发或修复bug...

    使用Qt Creator作为Linux IDE,实现Redis源码编译和断点调试

    本教程将详细介绍如何使用Qt Creator作为Linux下的IDE,编译Redis源码并进行断点调试。 首先,确保你已经安装了Qt Creator和必要的编译工具,如GCC或Clang。在Ubuntu系统中,可以使用以下命令安装: ```bash sudo ...

Global site tag (gtag.js) - Google Analytics