- 浏览: 244366 次
- 性别:
- 来自: 南京
最新评论
-
phplife:
写的很棒,对我很有帮助,thx!
Erlang OTP学习(1):gen_server -
longshaohang:
写的不错,不过最后markLimit的讨论太少,我的理解是bu ...
BufferedInputStream实现原理分析 -
lin_464025910:
Erlang 很牛逼的 开发语言, 最近才关注 性能确实 不 ...
Erlang 文件处理(读书笔记) -
jaychang:
写的很不错MARK下
BufferedInputStream实现原理分析 -
vavi:
while (count == items.length) ...
Java锁相关总结
文章列表
《Redis源码学习笔记》文章列表
由于图片较大,缩放较为模糊,请双击打开查看原图 ^_^
在主从复制过程中,我们提到过RDB文件,作为Redis持久化方式之一,RDB把数据库某一时刻的内容,也就是快照,以二进制的方式记录到文件,并且在下次启动的时候可以用来初始化Redis;
RDB最重要的两个过程是rdbSave和rdbLoad,下面我就这两个过程分别叙述;
rdbSave
在具体看rdbSave过程之前,我们先看下RDB文件格式:
我们可以简单思考下,RDB文件协议为什么会那样设计?
1. RDB文件以"REDIS"开头是为了区分普通文件,这样redis在 ...
《Redis源码学习笔记》文章列表
由于图片较大,缩放较为模糊,请双击打开查看原图 ^_^
Redis提供两种持久化方式,RDB和AOF;与RDB不同,AOF可以完整的记录整个数据库,而不像RDB只是数据库某一时刻的快照;
那么AOF模式为什么可以完整的记录整个数据库呢?
原理:在AOF模式下,Redis会把执行过的每一条更新命令记录下来,保存到AOF文件中;当Redis需要恢复数据库数据时,只需要从之前保存的AOF文件中依次读取命令,执行即可 eg.
我们执行了以下命令:
redis 127.0.0.1:6379> set name diaocow
OK
redis 12 ...
《Redis源码学习笔记》文章列表
Redis可以为数据库中的每一个键关联一个过期时间,当到达指定时间后Redis就会把该键从数据库中删除,eg:
redis 127.0.0.1:6379> setex name 5 diaocow # 为键name设置5秒的过期时间
OK
redis 127.0.0.1:6379> 5 ...
《Redis源码学习笔记》文章列表
由于图片较大,缩放较为模糊,请双击打开查看原图 ^_^
主从复制简单来说就是把一台redis数据库中的数据同步到另一台redis数据库,并且按照数据流向,数据的发送者我们称作master,数据的接受 ...
《Redis源码学习笔记》文章列表
Redis中的事务,提供了一种“将多个命令打包并且一次执行”的方式;
当用户输入MULTI命令时,就打开了客户端REDIS_MULTI选项,客户端从“非事务状态”切换到“事务状态”
之后客户端执行的所有命令都不会被Redis立即执行,而是放到客户端的“命令队列”里去(服务器返回QUEUED字样,表示命令已经入队),当客户端发出EXEC命令(表示客户端需要执行事务),这时候Redis从客户端的“命令队列”里依次取出命令执行,eg:
redis 127.0.0.1:6379> multi # 客户端进入事务状态
OK
redis 127.0. ...
《Redis源码学习笔记》文章列表
Redis的SUBSCRIBE命令,可以让客户端订阅任意数量的频道,每当有新消息发送到某个频道时,Redis就会把这消息发送给所有订阅该频道的客户端;如下图:客户端Client_1,Client_2,Client_3都订阅了频道channel,当有消息PUBLISH到频道channel时,这三个客户端都将收到消息:
原理:RedisServer内部维护了一个pubsub_channels字典,其中字典的键就是被订阅的频道,而键值就是订阅该频道的客户端列表;
这样,当一个客户端执行PUBLISH channel_name命令时,Redis就可以根据 ...
《Redis源码学习笔记》文章列表
Redis没有使用第三方事件库来处理socket(譬如Libevent),而是自己实现了一个非常精巧的事件库(加上注释不到600行代码),这使得我们可以更加专注于Redis本身代码的阅读,而不必陷于三方库的学 ...
《Redis源码学习笔记》文章列表
由于图片较大,缩放较为模糊,请双击打开查看原图 ^_^
要看懂redis代码,其中重要的一步就是要看懂它里面所使用的数据结构,而在这不算少的数据结构中,最重要的就是字典,它几乎就是redis实现各种功能的骨架,所以理解好字典至关重要!
redis作为一个nosql数据库,所有的key-value都是存储在一个字典中,而字典则是用哈希表实现的;关于哈希表原理,随便上网查一下都能找到一大堆资料,因此这里我也不想做过多赘述,直接开门见山,看下在redis中哈希表是什么样的:
上图所示结构对应代码如下:
// 字典
typedef struct di ...
1. 《Redis源码学习笔记》数据结构-字典
2. 《Redis源码学习笔记》事件库
3. 《Redis源码学习笔记》事务
4. 《Redis源码学习笔记》发布/订阅
5. 《Redis源码学习笔记》主从复制
6. 《Redis源码学习笔记》键过期
7. 《Redis源码学习笔记》R ...
自己是个python新手,之前买了本<<python核心编程>>,但看了一半实在看不下去了(内容过于啰嗦,而且在关键点的地方又浅尝辄止),所以希望通过阅读一些简单的开源项目来快速提高python水平,最终让我发现了webpy这个好东西!
那么webpy是什么呢? 阅读它的源码我们又能学到什么呢?
简单说webpy就是一个开源的web应用框架(官方首页:http://webpy.org/)
它的源代码非常整洁精干,学习它一方面可以让我们快速了解python语法(遇到看不懂的语法就去google),另一方面可以学习到python高级特性的使用(譬如反射,装饰器),而且在 ...
看完了该章,觉得最重要的是需要了解以下几个方面:
a.stat结构
b.进程权限及作用
c.文件相关属性(访问权限,文件时间等等)
d.unix文件系统(inode和block关系)
现在我就以流水账^_^的形式对上述几个方面做个总结:
-------------- ...
对于unix系统而言,一切皆“文件”,所以我们就可以使用一套基本的IO函数,来对所有的“文件”进行读写操作!现在我们来看下文件操作的几个底层IO
1.open函数用来打开或创建一个文件,其函数原型如下:
int open(const char *pathn ...
之前说了rebar编译的核心部分(rebar_base_compile:run/4方法),现在我们就完整的看下Erlang编译流程(不准备细致的分析每一行代码,只罗列其中较为重要的部分)
编译的入口方法是: rebar_erlc_compiler:compile/2
其中doterl_compile负责编译我们写的Erlang源代码文件,我们来看下它的相关代码
注意观察第208行代码,这就是我们上一节说的核心编译部分(串行编译和并行编译),其中:
fun(S, C) ->
internal_erl_compile(C, S, OutDir1, ErlOpts)
...
最近看霸爷的微博(http://weibo.com/tchuba)提到,rebar(https://github.com/basho/rebar)是学习Erlang很好的材料,因此作为Erlang新手,自己也把源码下载下来看了下,确实发现代码写的非常优雅工整,里面的每个方法(函数)写的都很短小 ...
ets是什么?
ets是Erlang Term Storage的缩写,它是一个基于内存的KV Table,支持大数据量存储以及高效查询.
ets有4种类型的table:
settable中的每一个Value(Tuple)都是唯一,并且一个Key只能对应一个Valueordered_set同set,唯一不同的是table ...