代码改变世界

我的书籍《Redis 源码日志》

2018-11-07 14:49 by 捣乱小子, 286 阅读, 收藏, 编辑
摘要:http://daoluan.net/redis-source-notes/ 阅读全文

深入剖析 redis 主从复制

2014-05-12 21:44 by 捣乱小子, 15670 阅读, 收藏, 编辑
摘要:主从概述redis 支持 master-slave(主从)模式,redis server 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据。特殊的,一个 从机同样可以设置为一个 redis server 的主机,这样一来 master-slave 的分布看起来就是一个... 阅读全文

深入剖析 redis AOF 持久化策略

2014-04-14 21:19 by 捣乱小子, 12368 阅读, 收藏, 编辑
摘要:本篇主要讲的是 AOF 持久化,了解 AOF 的数据组织方式和运作机制。redis 主要在 aof.c 中实现 AOF 的操作。数据结构 rioredis AOF 持久化同样借助了 struct rio. 详细内容在《深入剖析 redis RDB 持久化策略》中有介绍。AOF 数据组织方式假设 re... 阅读全文

初探单点登录 SSO

2014-04-03 19:39 by 捣乱小子, 14256 阅读, 收藏, 编辑
摘要:单点登录单点登录(Single sign-on,SSO)是一种访问控制,在多个软件应用中,用户只需登录其中一个应用,就可以成功访问其他应用;同样,用户只需注销其中一个应用,就可以成功注销其他应用。当一个公司产品线越来越复杂,做的东西越来越多,考虑到用户的便利性和业务的交集,单点登录也就变得越来越必然。譬如,阿里巴巴中的淘宝网,天猫,聚划算和一淘,考虑下面的场景:我们用户登录淘宝网购物,紧接着朋友打电话说出去玩,于是打开聚划算的时候你会发现,你已经登了聚划算!可能这些细节都被大多数人忽略了(被谁给惯坏了),但如果要让用户再次手动登录聚划算,用户体验可想而知。这种便利性就是单点登录所带来的。在单点 阅读全文

深入剖析 redis RDB 持久化策略

2014-03-26 12:31 by 捣乱小子, 9660 阅读, 收藏, 编辑
摘要:简介 redis 持久化 RDB、AOFredis 提供两种持久化方式:RDB 和 AOF。redis 允许两者结合,也允许两者同时关闭。RDB 可以定时备份内存中的数据集。服务器启动的时候,可以从 RDB 文件中回复数据集。AOF 可以记录服务器的所有写操作。在服务器重新启动的时候,会把所有的写操作重新执行一遍,从而实现数据备份。当写操作集过大(比原有的数据集还大),redis 会重写写操作集。本篇主要讲的是 RDB 持久化,了解 RDB 的数据保存结构和运作机制。redis 主要在 rdb.h 和 rdb.c 两个文件中实现 RDB 的操作。数据结构 rio持久化的 IO 操作在 rio. 阅读全文

深入剖析 redis 事件驱动

2014-03-09 15:28 by 捣乱小子, 9707 阅读, 收藏, 编辑
摘要:概述redis 内部有一个小型的事件驱动,它和 libevent 网络库的事件驱动一样,都是依托 I/O 多路复用技术支撑起来的。利用 I/O 多路复用技术,监听感兴趣的文件 I/O 事件,例如读事件,写事件等,同时也要维护一个以文件描述符为主键,数据为某个预设函数的事件表,这里其实就是一个数组或者链表 。当事件触发时,比如某个文件描述符可读,系统会返回文件描述符值,用这个值在事件表中找到相应的数据项,从而实现回调。同样的,定时事件也是可以实现的,因为系统提供的 I/O 多路复用技术中的函数允许我们设定时间值。上面一段话比较综合,可能需要一些 linux 系统编程和网络编程的基础,但你会看到多 阅读全文

memcached 源码阅读笔记

2013-12-19 22:20 by 捣乱小子, 2595 阅读, 收藏, 编辑
摘要:阅读 memcached 最好有 libevent 基础, memcached 是基于 libevent 构建起来的. 通由 libevent 提供的事件驱动机制触发 memcached 中的 IO 事件.个人认为, 阅读源码的起初最忌钻牛角尖, 如头文件里天花乱坠的结构体到底有什么用. 源文件里稀里哗啦的函数是做什么的. 刚开始并没必要事无巨细弄清楚头文件每个类型定义的具体用途; 很可能那些是不紧要的工具函数, 知道他的功能和用法就没他事了.来看 memcached 内部做了什么事情. memcached 是用 c 语言实现, 必须有一个入口函数main(), memcached 的生命从这 阅读全文

Django 源码小剖: Django ORM 查询管理器

2013-11-12 23:59 by 捣乱小子, 3784 阅读, 收藏, 编辑
摘要:ORM 查询管理器对于 ORM 定义: 对象关系映射,Object Relational Mapping, ORM,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。ORM 能大大简化并抽象数据库的操作.假设 django 的一个工程中包含一个名为 Book 的模块(model), 在 views.py 的函数中可能会写出查询语句:# views.pydef index(request): book_set = Book.objects.filter(id=1) 或者 book_s... 阅读全文

Django 源码小剖: Django 对象关系映射(ORM)

2013-10-12 09:25 by 捣乱小子, 4756 阅读, 收藏, 编辑
摘要:引从前面已经知道, 一个 request 的到来和一个对应 response 的返回的流程, 数据处理和数据库离不开. 我们也经常在 views.py 的函数定义中与数据库打交道.django ORM 源代码组织结构对于数据库, django 有自己的一套 ORM(对象关系映射), 或许其他的框架可以随意更换 ORM, 但 django 不建议这么做. 因为 django 内置有很多的 model, 这些 model 无疑是用 django 内置 ORM 实现的, 如果更换后, 内置的 model 就无效了, 除非以下两个选择:你已经吃透了 django 的 ORM, 定制自己的 ORM, 但 阅读全文

红黑树并没有我们想象的那么难(下)

2013-09-29 16:22 by 捣乱小子, 3224 阅读, 收藏, 编辑
摘要:上、下两篇已经完成, 希望能帮助到大家.红黑树并没有我们想象的那么难(上):http://daoluan.net/blog/?p=2057红黑树并没有我们想象的那么难(下):http://daoluan.net/blog/?p=2112SGI STL map 实现概述根据上一节的红黑树分析, 结合 sgi stl map 的实现, 看看红黑树的源码是如何实现的. 以下主要以代码的注释为主. sgi stl map 底层实现是_Rb_tree类, 为了方便管理,_Rb_tree 内置了_M_header, 用于记录红黑树中的根节点, 最小节点和最大节点. 在插入删除中都会对其进行维护. 找到一. 阅读全文

红黑树并没有我们想象的那么难(上)

2013-09-26 11:01 by 捣乱小子, 37257 阅读, 收藏, 编辑
摘要:<红黑树并没有我们想象的那么难> 上、下两篇已经完成, 希望能帮助到大家. 红黑树并没有我们想象的那么难(上) 红黑树并没有我们想象的那么难(下) 红黑树并没有想象的那么难, 初学者觉得晦涩难读可能是因为情况太多. 红黑树的情况可以通过归结, 通过合并来得到更少的情况, 如此可以加深对红黑树的理解. 阅读全文

Django 源码小剖: 响应数据 response 的返回

2013-09-23 23:30 by 捣乱小子, 2705 阅读, 收藏, 编辑
摘要:响应数据的返回在 WSGIHandler.__call__(self, environ, start_response) 方法调用了WSGIHandler.get_response() 方法, 由此得到响应数据对象 response. 如今所要做的, 便是将其返回给客户端. 在Django 源码小剖: 初探 WSGI中,简要的概括了请求到来时 django 自带服务器的执行关系, 摘抄如下:make_server() 中 WSGIServer 类已经作为服务器类, 负责接收请求, 调用 application 的处理, 返回相应;WSGIRequestHandler 作为请求处理类, 并已经配 阅读全文

Django 源码小剖: 更高效的 URL 调度器(URL dispatcher)

2013-09-22 00:22 by 捣乱小子, 1250 阅读, 收藏, 编辑
摘要:效率问题django 内部的 url 调度机制说白了就是给一张有关匹配信息的表, 这张表中有着 url -> action 的映射, 当请求到来的时候, 一个一个(遍历)去匹配. 中, 则调用 action, 产生相应数据返回; 不中, 则会产生 404 等的错误, 而 django 中有内置 404 等错误响应方法.这种方法和 MFC 里 message map 差不多, 从项目实践(特别是配置 urls.py 文件)就可以猜到大概是这样一种工作模式.注意上面关于 django url 调度机制的白话描述中的「一个一个」, 这里就有效率上的问题了. 倘若业务逻辑不复杂, 且访问量不高, 阅读全文

Django 源码小剖: URL 调度器(URL dispatcher)

2013-09-15 22:26 by 捣乱小子, 2566 阅读, 收藏, 编辑
摘要:在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 URL. 这是 django url 匹配处理机制的一小部分.URL 调度器详解django url 匹配处理机制主要由一下模块实现: django.conf.urls 和 django.core.urlresolver.py. 有需要摘取上一节中的代码:# BaseHandler.get_response() 的定义# 处理请求的函数, 并返回 responsedef get_response(self, request): "Retu 阅读全文

Django 源码小剖: 初探中间件(middleware)

2013-09-14 00:36 by 捣乱小子, 4230 阅读, 收藏, 编辑
摘要:因为考虑到文章的长度, 所以BaseHandler 的展开被推迟了. 在BaseHandler 中隐藏着中间件的信息, 较常见的SessionMiddleware 就已经默认安装. BaseHandler 的展开主要是以代码为主, 但已经加入了注释; 文章的最后附一张美图 .最后, 祝程序员们节日快乐, 别太宅了 ;)BaseHandler 详解BaseHandler 在 django.core.handlers.base.py 中定义, 有两个核心的成员方法不得不提, 里面就涉及了中间件的信息, 照抄如下(有点长, 但已经加入注释):# 好经典的 handlerclass BaseHandl 阅读全文